About this primer
Ever since the first genome-wide association study (GWAS) on age-related macular degeneration, and the promise of personalized medicine in the wake of the Human Genome Project, large-scale genetic association studies hold significant sway in contemporary health research and drive drug-development pipelines. In the past 2 decades, researchers delved into GWAS, aiming to unveil genetic variations linked to both human traits, such as the color of your eyes, and rare and common complex diseases. These findings serve as crucial keys to unravel the intricate mechanisms underlying diseases, shedding light on whether the correlations identified in observational studies between risk factors and diseases are truly causal.
These studies have ushered in an exciting era where many researchers thrive on developing new methods and bioinformatic tools to parse ever-growing large datasets collected large population-based biobanks. However, the analyses of these data are challenging and it can be daunting to see the forest for tree among the many tools and their various functions. Enter A Practical Primer in Human Complex Genetics. This GitBook was originally written back in 2022 for the Genetic Epidemiology course organized by the Master Epidemiology of Utrecht University. This practical guide will teach you how to design a GWAS, perform quality control (QC), execute the actual analyses, annotate the GWAS results, and perform further downstream post-GWAS analyses. Throughout the book you’ll work with ‘dummy’, that is fake, data, but in the end, we will use real-world data from the first release of the Welcome Trust Case-Control Consortium (WTCCC) focusing on coronary artery disease (CAD).
A major component of modern-day GWAS is genetic imputation, but for practical reasons it is not part of this book. However, I will provide some pointers as to how to go about do this with minimal coding or scripting experience. Likewise, the courses does not cover the aspects of meta-analyses of GWAS, but some excellent resources exist to which I will direct. As this practical primer evolves, these and other topics may find their place in this book.
I should also point out that emphasis of this book is on it being a practical primer. It is intended to provide some practical guidance to doing GWAS, and while theory is important, I will not cover this. Again, some very useful and excellent work exists to which I will point you, but I really want you to learn - and understand the theory - by doing.
So, although originally crafted as a companion for the course, this practical guide stands on its own as a comprehensive resource for diving into all facets of doing a GWAS — save for experimental follow-up, of course 😉.
I can imagine this seems overwhelming, but trust me, you’ll be okay. Just follow this practical. You’ll learn by doing and at the end of the day, you can execute a GWAS independently.
Ready to start?
Steps in a Genome-Wide Association Study
Now that you understand a bit of the navigation in Unix-systems, you’re ready to start this practical primer. We will make use of a dummy dataset containing cases and controls. We will explain and execute the following steps:
- convert raw data to a more memory-efficient format
- apply extensive quality control on samples and SNPs
- assess the ancestral background of your study population
- perform association testing
- visualize association results
Converting datasets
The format in which genotype data are returned to investigators varies among genome-wide SNP platforms and genotyping centers. Usually genotypes have been called by a genotyping center and returned in the standard PED and MAP file formats designed for PLINK.
A PED file is a white space (space or tab)-delimited file in which each line represents one individual and the first six columns are mandatory and in the following order:
- ‘Family ID’,
- ‘Individual ID’,
- ‘Paternal ID’,
- ‘Maternal ID’,
- ‘Sex (1=male, 2=female, 0=missing)’, and
- ‘Phenotype (1=unaffected, 2=affected, 0=missing)’.
The subsequent columns denote genotypes that can be any character (e.g., 1, 2, 3, 4 or A, C, G, T). Zero denotes a missing genotype. Each SNP must have two alleles (i.e., both alleles are either present or absent).
The order of SNPs in the PED file is given in the MAP file, in which each line denotes a single marker and the four white-space–separated columns are chromosome (1–22, X, Y or 0 for unplaced), marker name (typically an rs number), genetic distance in Morgans (this can be fixed to 0) and base-pair position (bp units).
Let’s start by using PLINK to converting the datasets to a lighter, binary form (a .bed-file). This file saves data in a more memory- and time-efficient manner (in a ‘binary’-format) to facilitate the analysis of large-scale data sets (Purcell S. 2007). The marker-information is stored in the .bim-file and the family information in the .fam-file. PLINK creates a .log file (named raw-GWA-data.log) that details (among other information) the implemented commands, the number of cases and controls in the input files, any excluded data and the genotyping rate in the remaining data. This file is very useful for checking whether the software is successfully completing commands.
Make sure you are in the right directory. Do you remember how to get there?
cd ~/Desktop/practical
Next, we’ll make a project directory.
mkdir -v ~/Desktop/practical/dummy_project
Now, we’ll convert the .ped/.map files to the binary-format.
plink --file rawdata/raw-GWA-data --make-bed --out dummy_project/rawdata
Let’s review the .log-file for a bit. It should look something like this:
PLINK v1.90b7.2 64-bit (11 Dec 2023) www.cog-genomics.org/plink/1.9/
(C) 2005-2023 Shaun Purcell, Christopher Chang GNU General Public License v3
Logging to dummy_project/rawdata.log.
Options in effect:
--file rawdata/raw-GWA-data
--make-bed
--out dummy_project/rawdata
16384 MB RAM detected; reserving 8192 MB for main workspace.
.ped scan complete (for binary autoconversion).
Performing single-pass .bed write (317503 variants, 2000 people).
--file: dummy_project/rawdata-temporary.bed +
dummy_project/rawdata-temporary.bim + dummy_project/rawdata-temporary.fam
written.
317503 variants loaded from .bim file.
2000 people (997 males, 1003 females) loaded from .fam.
2000 phenotype values loaded from .fam.
Using 1 thread (no multithreaded calculations invoked).
Before main variant filters, 2000 founders and 0 nonfounders present.
Calculating allele frequencies... done.
Warning: 11440 het. haploid genotypes present (see dummy_project/rawdata.hh );
many commands treat these as missing.
Total genotyping rate is 0.985682.
317503 variants and 2000 people pass filters and QC.
Among remaining phenotypes, 1023 are cases and 977 are controls.
--make-bed to dummy_project/rawdata.bed + dummy_project/rawdata.bim +
dummy_project/rawdata.fam ... done.
So, there are 317,503 variants included for 2,000 people, 997 males and 1,003 females. All of these individuals are ‘founders’. There are 1,023 cases and 977 controls. The genotyping rate is about 98.6% which is pretty good. Lastly, there are 11,440 heterozygous haploid genotypes present.
Question: Can you think off what the ‘11,440 heterozygous haploid genotypes present’ represent?
Quality control
We are ready for some quality control and quality assurance, heavily inspired by Anderson et al. (Anderson C. A. 2010) and Laurie et al. (Laurie C. C. 2010). In general, we should check out a couple of things regarding the data quality on two levels:
- samples
- variants
So, we will investigate the following:
- Are the sexes based on genetic data matching the ones given by the phenotype file?
- Identify individuals that are outliers in terms of missing data (call rate) or heterozygosity rates. This could indicate a genotyping error or sample swap.
- Identify duplicated or related individuals.
- Identify individuals with divergent ancestry.
- What are the allele frequencies?
- What is the per-SNP call rate?
- In the case of a case-control study (which is the case here), we need to check differential missingness between cases and controls.
Question: Can you think of other scenarios in which you may want to extend the check on differential missingness beyond a check between cases and controls?
Let’s get our hands dirty
All clear? Let’s start the work. On to step 1 of the QC for GWAS: filter samples of poor quality in Chapter 3.
Sample QC
Let’s start with the per-sample quality control. The goal here is to identify all the samples that for some reason (mentioned in the previous section) should be excluded.
Sex
We need to identify of individuals with discordant sex information comparing phenotypic and genotypic data. Let’s calculate the mean homozygosity rate across X-chromosome markers for each individual in the study.
plink --bfile dummy_project/rawdata --check-sex --out dummy_project/rawdata
This produces a file with the following columns:
- FID Family ID
- IID Within-family ID
- PEDSEX Sex code in input file
- SNPSEX Imputed sex code (1 = male, 2 = female, 0 = unknown)
- STATUS ‘OK’ if PEDSEX and SNPSEX match and are nonzero, ‘PROBLEM’ otherwise
- F Inbreeding coefficient, considering only X chromosome. Not present with ‘y-only’.
- YCOUNT Number of nonmissing genotype calls on Y chromosome. Requires ‘ycount’/‘y-only’.
We need to get a list of individuals with discordant sex data.
cat dummy_project/rawdata.sexcheck | awk '$5 =="STATUS" || $5 =="PROBLEM"' > dummy_project/rawdata.sexprobs.txt
Let’s have a look at the results.
cat dummy_project/rawdata.sexprobs.txt
Table 3.1: Sex issues.
FID | IID | PEDSEX | SNPSEX | STATUS | F |
|---|
772 | 772 | 2 | 0 | PROBLEM | 0.3084 |
853 | 853 | 2 | 0 | PROBLEM | 0.3666 |
1,920 | 1,920 | 2 | 0 | PROBLEM | 0.4066 |
When the homozygosity rate (F) is more than 0.2, but less than 0.8, the genotype data are inconclusive regarding the sex of an individual and these are marked in column SNPSEX with a 0, and the column STATUS “PROBLEM”.
Report the IDs of individuals with discordant sex information (Table 3.1) to those who conducted sex phenotyping. In situations in which discrepancy cannot be resolved, add the family ID (FID) and individual ID (IID) of the samples to a file named fail-sexcheck-qc.txt (one individual per line, tab delimited).
grep "PROBLEM" dummy_project/rawdata.sexcheck | awk '{ print $1, $2}' > dummy_project/fail-sexcheck-qc.txt
Sample call rates
Let’s get an overview of the missing data per sample and per SNP.
plink --bfile dummy_project/rawdata --missing --out dummy_project/rawdata
This produces two files, rawdata/rawdata.imiss and rawdata/rawdata.lmiss. In the .imiss-file the N_MISS column denotes the number of missing SNPs, and the F_MISS column denotes the proportion of missing SNPs per individual.
The grey dashed line in Figure 3.1 indicates the mean call rate, while the red dashed line indicates the threshold we had determined above.
Heterozygosity rate
To properly calculate heterozygosity rate and relatedness (identity-by-descent [IBD]) we need to do four things:
- pre-clean the data to get a high-quality set,
- of independent SNPs,
- exclude long-range linkage disequilibrium (LD) blocks that bias with these calculations, and
- exclude A/T and C/G SNPs as these may be ambivalent in interpretation when frequencies between cases and controls are close (MAF ± 0.45),
- remove all non-autosomal SNPs.
You can find an up-to-date list of LD blocks you should exclude in these types of analyses here for the different genome builds. In this case we are using build 37. For the purpose of this book we included a file with these regions in the support-directory.
We will use the following settings:
- remove A/T and C/G SNPs with the flag
--exclude dummy_project/all.atcg.variants.txt,
- call rate <1% with the flag
--geno 0.10,
- Hardy-Weinberg Equilibrium (HWE) p-value > 1x10-3 with the flag
--hwe 1e-3,
- and MAF>10% with the flag
--maf 0.10,
- prune the data to only select independent SNPs (with low LD r^2) of one pair each with
r^2 = 0.2 with the flags --indep-pairwise 100 10 0.2 and --extract rawdata/raw-GWA-data.prune.in,
- SNPs in long-range LD regions (for example: MHC chr 6 25.8-36Mb, chr 8 inversion 6-16Mb, chr17 40-45Mb, and a few more) with the flag
--exclude range support/exclude_problematic_range.txt,
- remove non-autosomal SNPs with the flag
--autosome.
First, get a list of A/T and C/G SNPs. Remember, the list of markers for this GWAS is noted in the .bim file. We can simply grep all the lines where the two alleles either have an A/T or C/G combination.
cat dummy_project/rawdata.bim | \
awk '($5 == "A" && $6 == "T") || ($5 == "T" && $6 == "A") || ($5 == "C" && $6 == "G") || ($5 == "G" && $6 == "C")' | awk '{ print $2, $1, $4, $3, $5, $6 }' \
> dummy_project/all.atcg.variants.txt
Second, clean the data and get a list of independent SNPs.
plink --bfile dummy_project/rawdata \
--autosome \
--maf 0.10 --geno 0.10 --hwe 1e-3 \
--indep-pairwise 100 10 0.2 \
--exclude range support/exclude_problematic_range.txt \
--make-bed --out dummy_project/rawdata.clean.temp
Please note, we have create a dataset without taking into account LD structure. Hence, the message ‘Pruned 0 variants from chromosome 1, leaving 19420.’ etc. In a dataset without any LD structure this flag --indep-pairwise 100 10 0.2 doesn’t actually work. However, with real-data you can use it to prune out unwanted SNPs in high LD.
Third, exclude the pruned SNPs. Note, how we include a file to exclude high-LD for the purpose of the practical.
plink --bfile dummy_project/rawdata.clean.temp \
--extract rawdata/raw-GWA-data.prune.in \
--make-bed --out dummy_project/rawdata.clean.ultraclean.temp
Fourth, remove the A/T and C/G SNPs.
plink --bfile dummy_project/rawdata.clean.ultraclean.temp \
--exclude dummy_project/all.atcg.variants.txt \
--make-bed --out dummy_project/rawdata.clean.ultraclean
Please note, this dataset doesn’t actually include this type of SNP, hence rawdata/all.atcg.variants.txt is empty! Again, you can use this command in real-data to exclude A/T and C/G SNPs.
Lastly, remove the temporary files.
rm -fv dummy_project/*.temp*
Finally, we can calculate the heterozygosity rate.
plink --bfile dummy_project/rawdata.clean.ultraclean --het --out dummy_project/rawdata.clean.ultraclean
This creates the file dummy_project/rawdata.clean.ultraclean.het, in which the third column denotes the observed number of homozygous genotypes, O(Hom), and the fifth column denotes the number of nonmissing genotypes, N(NM), per individual. We can now calculate the observed heterozygosity rate per individual using the formula (N(NM) - O(Hom))/N(NM).
Often there is a correlation between heterozygosity rate and missing data. Thus, we should plot the observed heterozygosity rate per individual on the x-axis and the proportion of missing SNP, that is the ‘SNP call rate’, per individuals on the y-axis (Figure 3.2).
Examine the plot (Figure 3.2) to decide reasonable thresholds at which to exclude individuals based on elevated missing or extreme heterozygosity. We chose to exclude all individuals with a genotype failure rate >= 0.03 (vertical dashed line) and/or a heterozygosity rate ± 3 s.d. from the mean (horizontal dashed lines). Add the FID and IID of the samples failing this QC to the file named fail-imisshet-qc.txt.
How would you create this file?
If all is right, you’d have something like Table 3.2.
Table 3.2: Failed samples due to sample call rates and heterozygosity rate.
FID | IID |
|---|
28 | 28 |
50 | 50 |
52 | 52 |
53 | 53 |
67 | 67 |
96 | 96 |
205 | 205 |
298 | 298 |
310 | 310 |
351 | 351 |
404 | 404 |
418 | 418 |
423 | 423 |
428 | 428 |
442 | 442 |
444 | 444 |
548 | 548 |
772 | 772 |
835 | 835 |
850 | 850 |
853 | 853 |
910 | 910 |
939 | 939 |
966 | 966 |
968 | 968 |
1,003 | 1,003 |
1,006 | 1,006 |
1,045 | 1,045 |
1,058 | 1,058 |
1,154 | 1,154 |
1,236 | 1,236 |
1,294 | 1,294 |
1,395 | 1,395 |
1,537 | 1,537 |
1,554 | 1,554 |
1,587 | 1,587 |
1,694 | 1,694 |
1,789 | 1,789 |
1,832 | 1,832 |
1,866 | 1,866 |
1,904 | 1,904 |
1,920 | 1,920 |
1,951 | 1,951 |
1,952 | 1,952 |
1,953 | 1,953 |
1,954 | 1,954 |
1,955 | 1,955 |
1,981 | 1,981 |
1,984 | 1,984 |
1,985 | 1,985 |
1,986 | 1,986 |
Ancestral background
Using a Principal Component Analysis (PCA) we can reduce the dimensions of the data, and project the “ancestral distances”. In other words, the principal component 1 (the first dimension) and principal component 2 (the second dimension) which will capture most of the variation in the data and represent how much each sample is alike the next. And when compared to a reference, you can deduce the ancestral background of each sample in your dataset. Of course this is relative: we will only know that a given sample is very much a like samples from a given population that exists today.
Nowadays we run such PCA against a large and diverse dataset containing many different populations. Old-school GWAS (pre-2009) would compare a dataset against HapMap 3, nowadays we prefer at a minimum the 1000G phase 3 populations. And in those ancient times the preferred software to run a PCA was Eigensoft which is a bit tricky to install (see Chapter ??), but nowadays PLINK provides the --pca-flag.
For the purpose of this practical primer we will run PCA using PLINK and its --pca-flag against an earlier version of 1000G, phase 1, which is slightly smaller and just as good to use.
1000G phase 1
We will project our data to the reference, in this example 1000G phase 1 (1000G), which includes individuals from 14 distinct global populations across 4 ‘super’-populations (Europeans [EUR], Africans [AFR], East-Asians [EAS], and Latin Americans [AMR]). In the real-world, using phase 1 may be just fine, but if you think your population evolved through extensive migration it’s probably best to use phase 3 data. In other words, the choice of reference is really depending on the dataset.
First, we will merge our data with 1000G. The alleles at each marker must be aligned to the same DNA strand to allow our data to merge correctly. Because not all SNPs are required for this analysis the A->T and C->G SNPs, which are more difficult to align, can be omitted.
Filter the 1000G data
First, we should get a list of relevant variants from our rawdata-dataset. We don’t need the other variants present in the 1000G dataset, right?
cat dummy_project/rawdata.bim | grep "rs" > dummy_project/all.variants.txt
Extract those from the 1000G phase 1 data.
plink --bfile ref_1kg_phase1_all/1kg_phase1_all --extract dummy_project/all.variants.txt --make-bed --out ref_1kg_phase1_all/1kg_phase1_raw
Filter A/T & C/G SNPs
As explained, the A/T and C/G SNPs are problematic, we want to exclude these too. So let’s get a list of A/T and C/G variants from 1000G to exclude - this may take a while.
cat ref_1kg_phase1_all/1kg_phase1_raw.bim | \
awk '($5 == "A" && $6 == "T") || ($5 == "T" && $6 == "A") || ($5 == "C" && $6 == "G") || ($5 == "G" && $6 == "C")' | awk '{ print $2, $1, $4, $3, $5, $6 }' \
> ref_1kg_phase1_all/all.1kg.atcg.variants.txt
Exclude those A/T and C/G variants in both datasets and at the same time filter to only retain high-quality data and exclude non-autosomal variants.
plink --bfile ref_1kg_phase1_all/1kg_phase1_raw --exclude ref_1kg_phase1_all/all.1kg.atcg.variants.txt -make-bed --out ref_1kg_phase1_all/1kg_phase1_raw_no_atcg
plink --bfile dummy_project/rawdata --exclude ref_1kg_phase1_all/all.1kg.atcg.variants.txt --make-bed --out dummy_project/rawdata_1kg_phase1_raw_no_atcg
Merging datasets
Try and merge the data.
plink --bfile dummy_project/rawdata_1kg_phase1_raw_no_atcg --bmerge ref_1kg_phase1_all/1kg_phase1_raw_no_atcg --make-bed --out dummy_project/rawdata.1kg_phase1
There probably is an error …
Error: 72 variants with 3+ alleles present.
* If you believe this is due to strand inconsistency, try --flip with
dummy_project/rawdata.1kg_phase1-merge.missnp.
(Warning: if the subsequent merge seems to work, strand errors involving SNPs
with A/T or C/G alleles probably remain in your data. If LD between nearby
SNPs is high, --flip-scan should detect them.)
* If you are dealing with genuine multiallelic variants, we recommend exporting
that subset of the data to VCF (via e.g. '--recode vcf'), merging with
another tool/script, and then importing the result; PLINK is not yet suited
to handling them.
See https://www.cog-genomics.org/plink/1.9/data#merge3 for more discussion.
So let’s flip some variants.
plink --bfile dummy_project/rawdata --exclude ref_1kg_phase1_all/all.1kg.atcg.variants.txt --flip dummy_project/rawdata.1kg_phase1-merge.missnp --make-bed --out dummy_project/rawdata_1kg_phase1_raw_no_atcg
Let’s try again and merge the data.
plink --bfile dummy_project/rawdata_1kg_phase1_raw_no_atcg --bmerge ref_1kg_phase1_all/1kg_phase1_raw_no_atcg --make-bed --out dummy_project/rawdata.1kg_phase1
There still is an error – there are a few multi-allelic variants present which PLINK can’t handle.
Error: 14 variants with 3+ alleles present.
* If you believe this is due to strand inconsistency, try --flip with
dummy_project/rawdata.1kg_phase1-merge.missnp.
(Warning: if the subsequent merge seems to work, strand errors involving SNPs
with A/T or C/G alleles probably remain in your data. If LD between nearby
SNPs is high, --flip-scan should detect them.)
* If you are dealing with genuine multiallelic variants, we recommend exporting
that subset of the data to VCF (via e.g. '--recode vcf'), merging with
another tool/script, and then importing the result; PLINK is not yet suited
to handling them.
See https://www.cog-genomics.org/plink/1.9/data#merge3 for more discussion.
Let’s just remove these multi-allelic variants.
plink --bfile dummy_project/rawdata_1kg_phase1_raw_no_atcg --exclude dummy_project/rawdata.1kg_phase1-merge.missnp --make-bed --out dummy_project/rawdata_1kg_phase1_raw_no_atcg_bi
After removing those pesky multi-allelic variants, we should be able to merge the data. We should take of the following:
- extract the pruned SNP-set (remember?),
--extract rawdata/raw-GWA-data.prune.i,
- exclude non-autosomal variants,
--autosome,
- and only keeping high-quality data,
--maf 0.10 --geno 0.10 --hwe 1e-3,
plink --bfile dummy_project/rawdata_1kg_phase1_raw_no_atcg_bi \
--bmerge ref_1kg_phase1_all/1kg_phase1_raw_no_atcg \
--autosome \
--maf 0.10 --geno 0.10 --hwe 1e-3 \
--extract rawdata/raw-GWA-data.prune.in \
--make-bed --out dummy_project/rawdata.1kg_phase1.clean
Before we continue it’s best to clean up a bit of the mess.
rm -fv dummy_project/rawdata_1kg_phase1_raw_no_atcg_bi* ref_1kg_phase1_all/1kg_phase1_raw_no_atcg* dummy_project/rawdata.1kg_phase1.pruned* dummy_project/rawdata_1kg_phase1_raw_no_atcg* dummy_project/rawdata.1kg_phase1-merge* dummy_project/rawdata.1kg_phase1.bed dummy_project/rawdata.1kg_phase1.bim dummy_project/rawdata.1kg_phase1.fam dummy_project/rawdata.1kg_phase1.hh dummy_project/rawdata.1kg_phase1.log ref_1kg_phase1_all/1kg_phase1_raw.*
Now we have prepared our dataset with only high-quality SNPs that have few missing data, that are high-frequent, exclude problematic genomic ranges, and merged to the 1000G phase 1 reference dataset. Your output should look something like this:
PLINK v1.90b7.2 64-bit (11 Dec 2023) www.cog-genomics.org/plink/1.9/
(C) 2005-2023 Shaun Purcell, Christopher Chang GNU General Public License v3
Logging to dummy_project/rawdata.1kg_phase1.clean.log.
Options in effect:
--autosome
--bfile dummy_project/rawdata_1kg_phase1_raw_no_atcg_bi
--bmerge ref_1kg_phase1_all/1kg_phase1_raw_no_atcg
--extract rawdata/raw-GWA-data.prune.in
--geno 0.10
--hwe 1e-3
--maf 0.10
--make-bed
--out dummy_project/rawdata.1kg_phase1.clean
16384 MB RAM detected; reserving 8192 MB for main workspace.
2000 people loaded from dummy_project/rawdata_1kg_phase1_raw_no_atcg_bi.fam.
1092 people to be merged from ref_1kg_phase1_all/1kg_phase1_raw_no_atcg.fam.
Of these, 1092 are new, while 0 are present in the base dataset.
Warning: Multiple positions seen for variant 'rs3934834'.
Warning: Multiple positions seen for variant 'rs3737728'.
Warning: Multiple positions seen for variant 'rs6687776'.
Warning: Multiple chromosomes seen for variant 'rs1050301'.
Warning: Multiple chromosomes seen for variant 'rs4850'.
317476 markers loaded from dummy_project/rawdata_1kg_phase1_raw_no_atcg_bi.bim.
312239 markers to be merged from ref_1kg_phase1_all/1kg_phase1_raw_no_atcg.bim.
Of these, 14 are new, while 312225 are present in the base dataset.
312190 more multiple-position warnings: see log file.
Performing single-pass merge (3092 people, 308317 variants).
Merged fileset written to dummy_project/rawdata.1kg_phase1.clean-merge.bed +
dummy_project/rawdata.1kg_phase1.clean-merge.bim +
dummy_project/rawdata.1kg_phase1.clean-merge.fam .
308317 variants loaded from .bim file.
3092 people (1522 males, 1570 females) loaded from .fam.
3092 phenotype values loaded from .fam.
--extract: 49856 variants remaining.
Using 1 thread (no multithreaded calculations invoked).
Before main variant filters, 3078 founders and 14 nonfounders present.
Calculating allele frequencies... done.
Total genotyping rate is 0.994867.
299 variants removed due to missing genotype data (--geno).
--hwe: 13825 variants removed due to Hardy-Weinberg exact test.
2617 variants removed due to minor allele threshold(s)
(--maf/--max-maf/--mac/--max-mac).
33115 variants and 3092 people pass filters and QC.
Phenotype data is quantitative.
--make-bed to dummy_project/rawdata.1kg_phase1.clean.bed +
dummy_project/rawdata.1kg_phase1.clean.bim +
dummy_project/rawdata.1kg_phase1.clean.fam ... done.
So in total there are 3,092 individuals, 1,522 males and 1,570 females, and 3,078 founders and 14 non-founders. The total genotyping rate is 99.5% and 33,115 variants are present.
Principal component analysis
Great, we’ve prepared our dummy project data and merged this with 1000G phase 1. Let’s execute the PCA using --pca in PLINK.
plink --bfile dummy_project/rawdata.1kg_phase1.clean --pca --out dummy_project/rawdata.1kg_phase1.clean
Plotting the PCA results
If all is peachy, you just succesfully ran PCA against 1000G phase 1. Using --pca we have calculated principal components (PCs), 20 in total by default, and we can now start plotting them. Let’s create a scatter diagram of the first two principal components, including all individuals in the file rawdata.1kg_phase1.clean.eigenvec (the first and second principal components are columns 3 and 4, respectively). We need to collect some per-sample information to color the points according to sample origin.
First we collect the results from the --pca, the dummy data phenotype information, and the reference population information.
Derive PC1 and PC2 thresholds so that only individuals who match the given ancestral population are included. For populations of European descent, this will be either the CEU or TSI 1000G individuals (Figure 3.3). Here, we chose to exclude all individuals with a first principal component score less than 0.0023.
Write the FID and IID of these individuals to a file called fail-ancestry-QC.txt.
cat dummy_project/rawdata.1kg_phase1.clean.eigenvec | \
awk '$3 < 0.0023' | awk '{ print $1, $2 }' > dummy_project/fail-ancestry-QC.txt
Choosing which thresholds to apply (and thus which individuals to remove) is not a straightforward process. The key is to remove those individuals with greatly divergent ancestry, as these samples introduce the most bias to the study. Identification of more fine-scale ancestry can be conducted by using less divergent reference samples (e.g., within Europe, stratification could be identified using the CEU, TSI (Italian), GBR (British), FIN (Finnish) and IBS (Iberian) samples from the 1,000 Genomes Project (http://www.1000genomes.org/)). Robust identification of fine-scale population structure often requires the construction of many (2–10) principal components.
Removing samples
Finally! We have a list of samples of poor quality or divergent ancestry, and duplicated or related samples. We should remove these. Let’s collect all IDs from our fail-*-files into a single file.
cat dummy_project/fail-* | sort -k1 | uniq > dummy_project/fail-qc-inds.txt
This new file should now contain a list of unique individuals failing the previous QC steps which we want to remove.
plink --bfile dummy_project/rawdata --remove dummy_project/fail-qc-inds.txt --make-bed --out dummy_project/clean_inds_data
Question: How many variants and samples are left? How many cases and how many controls did you loose?
The next step
Now that you filtered samples, we should turn our attention to step 2 of the QC for GWAS: identify SNPs of poor quality in Chapter @ref(gwas_basics_snp_qc).
Per-SNP QC
Now that we removed samples, we can focus on low-quality variants.
SNP call rates
We start by calculating the missing genotype rate for each SNP, in other words the per-SNP call rate.
plink --bfile dummy_project/clean_inds_data --missing --out dummy_project/clean_inds_data
Let’s visualize the results to identify a threshold for extreme genotype failure rate. We chose a callrate threshold of 3%, but it’s arbitrary and depending on the dataset, the data (visualization), and the number of samples (Figure 4.1).
Differential SNP call rates
There could also be differences in genotype call rates between cases and controls. It is very important to check for this because these differences could lead to spurious associations. We can test all markers for differences in call rate between cases and controls, or based on other criteria.
plink --bfile dummy_project/clean_inds_data --test-missing --out dummy_project/clean_inds_data
Let’s collect all the SNPs with a significantly different (P < 0.00001) missing data rate between cases and controls.
cat dummy_project/clean_inds_data.missing | awk '$5 < 0.00001' | awk '{ print $2 }' > dummy_project/fail-diffmiss-qc.txt
Allele frequencies
We should also get an idea on what the allele frequencies are in our dataset. Low frequent SNPs should probably be excluded, as these are uninformative when monomorphic (allele frequency = 0), or they may lead to spurious associations.
plink --bfile dummy_project/clean_inds_data --freq --out dummy_project/clean_inds_data
Let’s also plot these data. You can view the result below, and try it yourself (Figure 4.2).
A note on allele coding
Oh, one more thing about alleles.
PLINK codes alleles as follows:
A1 = minor allele, the least frequent allele
A2 = major allele, the most frequent allele
And when you use PLINK the flag --freq or --maf is always relative to the A1-allele, as is the odds ratio (OR) or effect size (beta).
However, SNPTEST makes use of the so-called OXFORD-format, this codes alleles as follows:
A = the ‘other’ allele
B = the ‘coded’ allele
When you use SNPTEST it will report the allele frequency as CAF, in other words the coded allele frequency, and the effect size (beta) is always relative to the B-allele. This means, CAF could be the MAF, or minor allele frequency, but this is not a given.
In other words, always make sure what the allele-coding of a given program, be it PLINK, SNPTEST, GCTA, et cetera, is! I cannot stress this enough. Ask yourself: ‘what is the allele frequency referring to?’, ‘the effect size is relative to…?’.
Right, let’s continue.
Hardy-Weinberg Equilibrium
Because we are performing a case-control genome-wide association study, we probably expect some differences in Hardy-Weinberg Equilibrium (HWE), but extreme deviations are probably indicative of genotyping errors.
plink --bfile dummy_project/clean_inds_data --hardy --out dummy_project/clean_inds_data
Let’s also plot these data. You can view the result below, and type over the code to do it yourself.
Final SNP QC
We are ready to perform the final QC. After inspecting the graphs we will filter on a MAF < 0.01, call rate < 0.05, and HWE < 0.00001 (Figure 4.3), in addition those SNPs that failed the differential call rate test will be removed.
plink --bfile dummy_project/clean_inds_data --exclude dummy_project/fail-diffmiss-qc.txt --maf 0.01 --geno 0.05 --hwe 0.00001 --make-bed --out dummy_project/cleandata
A Milestone
Congratulations. You reached a very important milestone. Now that you filtered samples and SNPs, we can finally start the association analyses in Chapter @ref(gwas_testing).
Genome-Wide Association Study
Now that you have learned how to perform QC, you can easily run a GWAS and execute some downstream visualization and analyses. Let’s do this with a dummy dataset.
Exploring the data
Even though someone says that the QC was done, it is still wise and good practice to run some of the commands above to get a ‘feeling’ about the data. So let’s do this.
plink --bfile gwas/gwa --freq --out dummy_project/gwa
plink --bfile gwas/gwa --missing --out dummy_project/gwa
plink --bfile gwas/gwa --hardy --out dummy_project/gwa
Let’s visualize the results. First we should load in all the results.
Question: Load the data using R. [Hint: use and adapt the examples from the previous chapters.]
We can plot the per-stratum HWE p-values.
Question: Plot the per-stratum HWE p-values using R. [Hint: use and adapt the examples from the previous chapters.]
We will want to see what the distribution of allele frequencies looks like.
Question: Plot the allele frequencies using R. [Hint: use and adapt the examples from the previous chapters.]
We will want to identify samples that have poor call rates.
Question: Plot the per-sample call rates using R. [Hint: use and adapt the examples from the previous chapters.]
We also need to know what the per SNP call rates are.
Question: Plot the per-SNP call rates using R. [Hint: use and adapt the examples from the previous chapters.]
Genetic models
A simple chi-square test of association can be done.
plink --bfile gwas/gwa --model --out gwas/data
Genotypic, dominant and recessive tests will not be conducted if any one of the cells in the table of case-control by genotype counts contains less than five observations. This is because the chi-square approximation may not be reliable when cell counts are small. For SNPs with MAFs < 5%, a sample of more than 2,000 cases and controls would be required to meet this threshold and more than 50,000 would be required for SNPs with MAF < 1%.
You can change this default behaviour by adding the flag --cell, e.g., we could lower the threshold to 3.
plink --bfile gwas/gwa --model --cell 3 --out gwas/data
Let’s review the contents of the results.
It contains 1,530,510 rows, one for each SNP, and each type of test (genotypic, trend, allelic, dominant, and recessive) and the following columns:
- chromosome [
CHR],
- the SNP identifier [
SNP],
- the minor allele [
A1] (remember, PLINK always codes the A1-allele as the minor allele!),
- the major allele [
A2],
- the test performed [
TEST]:
GENO (genotypic association);
TREND (Cochran-Armitage trend);
ALLELIC (allelic as- sociation);
DOM (dominant model); and
REC (recessive model)],
- the cell frequency counts for cases [
AFF],
- the cell frequency counts for controls [
UNAFF],
- the chi-square test statistic [
CHISQ],
- the degrees of freedom for the test [
DF],
- and the asymptotic P value [
P] of association.
Question: Do you know which model, i.e. TEST is most commonly used and reported? And why is that, do think?
Logistic regression
We can also perform a test of association using logistic regression. In this case we might want to correct for covariates/confounding factors, for example age, sex, ancestral background, i.e. principal components, and other study specific covariates (e.g. hospital of inclusion, genotyping centre etc.). In that case each of these P values is adjusted for the effect of the covariates.
When running a regression analysis, be it linear or logistic, PLINK assumes a multiplicative model. By default, when at least one male and one female is present, sex (male = 1, female = 0) is automatically added as a covariate on X chromosome SNPs, and nowhere else. The sex flag causes it to be added everywhere, while no-x-sex excludes it.
plink --bfile gwas/gwa --logistic sex --covar gwas/gwa.covar --out gwas/data
Let’s examine the results.
## [1] 918306 9
## CHR SNP BP A1 TEST NMISS OR STAT P
## <int> <char> <int> <char> <char> <int> <num> <num> <num>
## 1: 1 rs3934834 995669 T ADD 3818 1.0290 0.38120 0.7031
## 2: 1 rs3934834 995669 T AGE 3818 1.0020 1.11800 0.2635
## 3: 1 rs3934834 995669 T SEX 3818 1.0120 0.19090 0.8486
## 4: 1 rs3737728 1011278 A ADD 3982 1.0190 0.38670 0.6990
## 5: 1 rs3737728 1011278 A AGE 3982 1.0020 1.09800 0.2721
## 6: 1 rs3737728 1011278 A SEX 3982 1.0060 0.09898 0.9212
## 7: 1 rs6687776 1020428 T ADD 3915 0.9692 -0.33330 0.7389
## 8: 1 rs6687776 1020428 T AGE 3915 1.0020 1.04000 0.2984
## 9: 1 rs6687776 1020428 T SEX 3915 1.0150 0.23690 0.8127
Question: How come there are more lines in this file than there are variants?
If no model option is specified, the first row for each SNP corresponds to results for a multiplicative test of association. The C >= 0 subsequent rows for each SNP correspond to separate tests of significance for each of the C covariates included in the regression model. We can remove the covariate-specific lines from the main report by adding the hide-covar flag.
The columns in the association results are:
- the chromosome [
CHR],
- the SNP identifier [
SNP],
- the base-pair location [
BP],
- the minor allele [
A1],
- the test performed [
TEST]: ADD (multiplicative model or genotypic model testing additivity),
GENO_2DF (genotypic model),
DOMDEV (genotypic model testing deviation from additivity),
DOM (dominant model), or
REC (recessive model)],
- the number of missing individuals included [
NMISS],
- the
OR relative to the A1, i.e. minor allele,
- the coefficient z-statistic [
STAT], and
- the asymptotic P-value [
P] of association.
We need to calculate the standard error and confidence interval from the z-statistic. We can modify the effect size (OR) to output the beta by adding the beta flag.
Question: Can you write down the mathematical relation between beta and OR?
Let’s get visual
Looking at numbers is important, but it won’t give you a perfect overview. We should turn to visualizing our results in Chapter 6.
GWAS visualisation
Data visualization is key, not only for presentation but also to inspect the results.
QQ plots
We should create quantile-quantile (QQ) plots to compare the observed association test statistics with their expected values under the null hypothesis of no association and so assess the number, magnitude and quality of true associations.
First, we will add the standard error, call rate, A2, and allele frequencies.
## Key: <SNP>
## SNP CHR BP A1 NMISS OR STAT P A2 MAF
## <char> <int> <int> <char> <int> <num> <num> <num> <char> <num>
## 1: rs10000010 4 21227772 C 3996 1.0420 0.9010 0.36760 T 0.4258
## 2: rs10000023 4 95952929 T 3957 0.9902 -0.2160 0.82900 G 0.4841
## 3: rs10000030 4 103593179 A 3991 0.9779 -0.3696 0.71170 G 0.1616
## 4: rs1000007 2 237416793 C 4000 1.0180 0.3649 0.71520 T 0.3122
## 5: rs10000092 4 21504615 C 3963 0.9240 -1.6770 0.09354 T 0.3430
## 6: rs10000121 4 157793485 G 3919 0.9665 -0.7525 0.45170 A 0.4532
## NCHROBS callrate
## <int> <num>
## 1: 7992 0.99900
## 2: 7914 0.98925
## 3: 7982 0.99775
## 4: 8000 1.00000
## 5: 7926 0.99075
## 6: 7838 0.97975
## [1] 306102 14
## # A tibble: 6 × 14
## SNP CHR BP A1 A2 MAF callrate NMISS NCHROBS BETA SE
## <chr> <int> <int> <chr> <chr> <dbl> <dbl> <int> <int> <dbl> <dbl>
## 1 rs10000… 4 2.12e7 C T 0.426 0.999 3996 7992 0.0411 0.0457
## 2 rs10000… 4 9.60e7 T G 0.484 0.989 3957 7914 -0.00985 0.0456
## 3 rs10000… 4 1.04e8 A G 0.162 0.998 3991 7982 -0.0223 0.0605
## 4 rs10000… 2 2.37e8 C T 0.312 1 4000 8000 0.0178 0.0489
## 5 rs10000… 4 2.15e7 C T 0.343 0.991 3963 7926 -0.0790 0.0471
## 6 rs10000… 4 1.58e8 G A 0.453 0.980 3919 7838 -0.0341 0.0453
## # ℹ 3 more variables: OR <dbl>, STAT <dbl>, P <dbl>
Let’s list the number of SNPs per chromosome. This gives a pretty good idea about the per-chromosome coverage. And it’s a sanity check: did the whole analysis run properly (we expect 22 chromosomes)?
Question: Why do the number of variants per chrosome (approximately) correlate with the chromosome number?
Question: Where are the data for chromosome X, Y and MT?
Let’s plot the QQ plot to diagnose our GWAS.
Manhattan plots
We also need to create a Manhattan plot to display the association test P-values as a function of chromosomal location and thus provide a visual summary of association test results that draw immediate attention to any regions of significance (Figure 6.2).
Other plots
It is also informative to plot the density per chromosome. We can use the CMplot for that which you can find here. For now we just make these graphs ‘quick-n-dirty’, you can further prettify them, but you easily loose track of time, so maybe carry on.
Question: What do the grey spots on the density plot indicate?
This would lead to the following graphs.
Interactive plots
You can also make an interactive version of the Manhattan - just because you can. The code below shows you how.
library(plotly)
library(dplyr)
# Prepare the dataset (as an example we use the data (gwasResults) from the `qqman`-package)
don <- gwasResults %>%
# Compute chromosome size
group_by(CHR) %>%
summarise(chr_len=max(BP)) %>%
# Calculate cumulative position of each chromosome
mutate(tot=cumsum(chr_len)-chr_len) %>%
select(-chr_len) %>%
# Add this info to the initial dataset
left_join(gwasResults, ., by=c("CHR"="CHR")) %>%
# Add a cumulative position of each SNP
arrange(CHR, BP) %>%
mutate( BPcum=BP+tot) %>%
# Add highlight and annotation information
mutate( is_highlight=ifelse(SNP %in% snpsOfInterest, "yes", "no")) %>%
# Filter SNP to make the plot lighter
filter(-log10(P)>0.5)
# Prepare X axis
axisdf <- don %>% group_by(CHR) %>% summarize(center=( max(BPcum) + min(BPcum) ) / 2 )
# Prepare text description for each SNP:
don$text <- paste("SNP: ", don$SNP, "\nPosition: ", don$BP, "\nChromosome: ", don$CHR, "\nLOD score:", -log10(don$P) %>% round(2), "\nWhat else do you wanna know", sep="")
# Make the plot
p <- ggplot(don, aes(x=BPcum, y=-log10(P), text=text)) +
# Show all points
geom_point( aes(color=as.factor(CHR)), alpha=0.8, size=1.3) +
scale_color_manual(values = rep(c("grey", "skyblue"), 22 )) +
# custom X axis:
scale_x_continuous( label = axisdf$CHR, breaks= axisdf$center ) +
scale_y_continuous(expand = c(0, 0)) + # remove space between plot area and x axis
# Add highlighted points
geom_point(data=subset(don, is_highlight=="yes"), color="orange", size=2) +
# Custom the theme:
theme_bw() +
theme(
legend.position="none",
panel.border = element_blank(),
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank()
)
ggplotly(p, tooltip="text")
It will produce something like this.

Again, this is an example with dummy data - you can try to do it for our GWAS, but careful with the time. You can also choose to carry on.
You will encounter the above types of visualizations in any high-quality GWAS paper, because each is so critically informative. Usually, analysts of large-scale meta-analyses of GWAS will also stratify the QQ-plots based on the imputation quality (if your GWAS was imputed), call rate, and allele frequency (although that is rarely shared in publications, not even in supplemental material).
Stop playing around
Alright. It’s time to stop playing around and do a quick recap of what you’ve learned.
- You learned how to convert datasets.
- You learned how to execute sample QC and create diagnostic graphics
- You learned how to do the same for SNP QC
- You learned how to execute an association study given a dataset, covariates, and different assumptions regarding the genetic model.
- You learned how to visualize results and played around with different visuals.
You should be ready for the real stuff. And if not, the next chapter will help you get ready: Chapter @ref(wtccc1_intro).
Licenses and disclaimers
Copyright
This book and all its material (“content”) is protected by copyright under Dutch Copyright laws and is the property of the author or the party credited as the provider of the content. You may not copy, reproduce, distribute, publish, display, perform, modify, create derivative works, transmit, or in any way exploit any such content, nor may you distribute any part of this content over any network, including a local area network, sell or offer it for sale, or use such content to construct any kind of database. You may not alter or remove any copyright or other notice from copies of the content on this website. Copying or storing any content except as provided above is expressly prohibited without prior written permission of the author or the copyright holder identified in the individual content’s copyright notice. For permission to use this content, please contact the author.
Disclaimer
The content contained herein is provided only for educational and informational purposes or as required by Dutch law. The author attempted to ensure that content is accurate and obtained from reliable sources, but does not represent it to be error-free. The author may add, amend or repeal any text, procedure or regulation, and failure to timely post such changes to this book shall not be construed as a waiver of enforcement. The author does not warrant that any functions on this website or the contents and references herein will be uninterrupted, that defects will be corrected, or that this website or the contents and references will be free from viruses or other harmful components. Any links to third party information on the author’s website are provided as a courtesy and do not constitute an endorsement of those materials or the third party providing them.
Images and data used
I took the at-most care to use refer to the original works and data sources where needed. Likewise, all the images c.q. figures are either produced specifically for this book, or I took them from Unsplash to brighten up the book. If you feel I made a mistake and your work should be properly referenced, please don’t hesitate to contact me.
These are the images from Unsplash listed here in no particular order.
LS0tIAp0aXRsZTogIkEgUHJhY3RpY2FsIFByaW1lciBpbiBIdW1hbiBDb21wbGV4IEdlbmV0aWNzIgpzdWJ0aXRsZTogIndpdGggYSB1c2UtY2FzZSBpbiBjYXJkaW92YXNjdWxhciBkaXNlYXNlIgphdXRob3I6ICJbZHIuIFNhbmRlciBXLiB2YW4gZGVyIExhYW5dKGh0dHBzOi8vdmFuZGVybGFhbmFuZC5zY2llbmNlKSBbIVtdKC4vaW1nL19sb2dvL3R3aXR0ZXJfY2lyY2xlX2JsdWUucG5nKXt3aWR0aD0yJX1dKGh0dHBzOi8vd3d3LnR3aXR0ZXIuY29tL3N3dmFuZGVybGFhbikgWyFbXSguL2ltZy9fbG9nby9lbWFpbF9jaXJjbGVfYmx1ZS5wbmcpe3dpZHRoPTIlfV0obWFpbHRvOnMudy52YW5kZXJsYWFuQGdtYWlsLmNvbSkiCmRhdGU6ICJWZXJzaW9uIDIuMC4yICgyMDI0LTA0LTA0KSIKZGVzY3JpcHRpb246ICJUaGlzIGlzIGEgcHJhY3RpY2FsIHByaW1lciBpbiBodW1hbiBjb21wbGV4IGdlbmV0aWNzIHdpdGggYSB1c2UtY2FzZSBpbiBjYXJkaW92YXNjdWxhciBkaXNlYXNlLiBUaGUgb3V0cHV0IGZvcm1hdCBmb3IgdGhpcyBwcmltZXIgaXMgYm9va2Rvd246OmdpdGJvb2suIgpkb2N1bWVudGNsYXNzOiBib29rCmdpdGh1Yi1yZXBvOiBzd3ZhbmRlcmxhYW4vQV9QcmFjdGljYWxfUHJpbWVyX2luX0h1bWFuX0NvbXBsZXhfR2VuZXRpY3MKbGluay1jaXRhdGlvbnM6IHllcwpiaWJsaW9ncmFwaHk6Ci0gYmlibGlvZ3JhcGh5L2Jvb2suYmliCi0gYmlibGlvZ3JhcGh5L3BhY2thZ2VzLmJpYgpiaWJsaW8tc3R5bGU6IGFwYWxpa2UKc2l0ZTogYm9va2Rvd246OmJvb2tkb3duX3NpdGUKYWx3YXlzX2FsbG93X2h0bWw6IHllcwojY292ZXItaW1hZ2U6ICJpbWFnZXMvY292ZXIucG5nIgojYXBwbGUtdG91Y2gtaWNvbjogInRvdWNoLWljb24ucG5nIgojYXBwbGUtdG91Y2gtaWNvbi1zaXplOiAxMjAKI2Zhdmljb246ICJmYXZpY29uLmljbyIKLS0tCgojIEFib3V0IHRoaXMgcHJpbWVyCgpFdmVyIHNpbmNlIHRoZSBmaXJzdCBnZW5vbWUtd2lkZSBhc3NvY2lhdGlvbiBzdHVkeSAoR1dBUykgb24gW2FnZS1yZWxhdGVkIG1hY3VsYXIgZGVnZW5lcmF0aW9uXShodHRwczovL2RvaS5vcmcvMTAuMTEyNi9zY2llbmNlLjExMDk1NTcpe3RhcmdldD0iX2JsYW5rIn0sIGFuZCB0aGUgcHJvbWlzZSBvZiBwZXJzb25hbGl6ZWQgbWVkaWNpbmUgaW4gdGhlIHdha2Ugb2YgdGhlIEh1bWFuIEdlbm9tZSBQcm9qZWN0LCBsYXJnZS1zY2FsZSBnZW5ldGljIGFzc29jaWF0aW9uIHN0dWRpZXMgaG9sZCBzaWduaWZpY2FudCBzd2F5IGluIGNvbnRlbXBvcmFyeSBoZWFsdGggcmVzZWFyY2ggYW5kIFtkcml2ZSBkcnVnLWRldmVsb3BtZW50IHBpcGVsaW5lc10oaHR0cDovL2R4LmRvaS5vcmcvMTAuMTAzOC9ucmQuMjAxNy4yNjIpe3RhcmdldD0iX2JsYW5rIn0uIEluIHRoZSBwYXN0IDIgZGVjYWRlcywgcmVzZWFyY2hlcnMgZGVsdmVkIGludG8gR1dBUywgYWltaW5nIHRvIHVudmVpbCBnZW5ldGljIHZhcmlhdGlvbnMgbGlua2VkIHRvIGJvdGggaHVtYW4gdHJhaXRzLCBzdWNoIGFzIHRoZSBjb2xvciBvZiB5b3VyIGV5ZXMsIGFuZCByYXJlIGFuZCBjb21tb24gY29tcGxleCBkaXNlYXNlcy4gVGhlc2UgZmluZGluZ3Mgc2VydmUgYXMgY3J1Y2lhbCBrZXlzIHRvIHVucmF2ZWwgdGhlIGludHJpY2F0ZSBtZWNoYW5pc21zIHVuZGVybHlpbmcgZGlzZWFzZXMsIHNoZWRkaW5nIGxpZ2h0IG9uIHdoZXRoZXIgdGhlIGNvcnJlbGF0aW9ucyBpZGVudGlmaWVkIGluIG9ic2VydmF0aW9uYWwgc3R1ZGllcyBiZXR3ZWVuIHJpc2sgZmFjdG9ycyBhbmQgZGlzZWFzZXMgYXJlIHRydWx5IGNhdXNhbC4gCgpUaGVzZSBzdHVkaWVzIGhhdmUgdXNoZXJlZCBpbiBhbiBleGNpdGluZyBlcmEgd2hlcmUgbWFueSByZXNlYXJjaGVycyB0aHJpdmUgb24gZGV2ZWxvcGluZyBuZXcgbWV0aG9kcyBhbmQgYmlvaW5mb3JtYXRpYyB0b29scyB0byBwYXJzZSBldmVyLWdyb3dpbmcgbGFyZ2UgZGF0YXNldHMgY29sbGVjdGVkIGxhcmdlIHBvcHVsYXRpb24tYmFzZWQgYmlvYmFua3MuIEhvd2V2ZXIsIHRoZSBhbmFseXNlcyBvZiB0aGVzZSBkYXRhIGFyZSBjaGFsbGVuZ2luZyBhbmQgaXQgY2FuIGJlIGRhdW50aW5nIHRvIHNlZSB0aGUgZm9yZXN0IGZvciB0cmVlIGFtb25nIHRoZSBtYW55IHRvb2xzIGFuZCB0aGVpciB2YXJpb3VzIGZ1bmN0aW9ucy4gRW50ZXIgX0EgUHJhY3RpY2FsIFByaW1lciBpbiBIdW1hbiBDb21wbGV4IEdlbmV0aWNzXy4gVGhpcyBbR2l0Qm9va10oaHR0cHM6Ly9janZhbmxpc3NhLmdpdGh1Yi5pby9naXRib29rLWRlbW8vKXt0YXJnZXQ9Il9ibGFuayJ9IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYmFjayBpbiAyMDIyIGZvciB0aGUgKipHZW5ldGljIEVwaWRlbWlvbG9neSoqIGNvdXJzZSBvcmdhbml6ZWQgYnkgdGhlIFtNYXN0ZXIgRXBpZGVtaW9sb2d5XShodHRwczovL2VwaWRlbWlvbG9neS1lZHVjYXRpb24ubmwpe3RhcmdldD0iX2JsYW5rIn0gb2YgVXRyZWNodCBVbml2ZXJzaXR5LiBUaGlzIHByYWN0aWNhbCBndWlkZSB3aWxsIHRlYWNoIHlvdSBob3cgdG8gZGVzaWduIGEgR1dBUywgcGVyZm9ybSBxdWFsaXR5IGNvbnRyb2wgKFFDKSwgZXhlY3V0ZSB0aGUgYWN0dWFsIGFuYWx5c2VzLCBhbm5vdGF0ZSB0aGUgR1dBUyByZXN1bHRzLCBhbmQgcGVyZm9ybSBmdXJ0aGVyIGRvd25zdHJlYW0gcG9zdC1HV0FTIGFuYWx5c2VzLiBUaHJvdWdob3V0IHRoZSBib29rIHlvdSdsbCB3b3JrIHdpdGggJ2R1bW15JywgdGhhdCBpcyBmYWtlLCBkYXRhLCBidXQgaW4gdGhlIGVuZCwgd2Ugd2lsbCB1c2UgcmVhbC13b3JsZCBkYXRhIGZyb20gdGhlIGZpcnN0IHJlbGVhc2Ugb2YgdGhlIFsqV2VsY29tZSBUcnVzdCBDYXNlLUNvbnRyb2wgQ29uc29ydGl1bSAoV1RDQ0MpKl0oaHR0cHM6Ly93d3cud3RjY2Mub3JnLnVrL2NjYzEvb3ZlcnZpZXcuaHRtbCl7dGFyZ2V0PSJfYmxhbmsifSBmb2N1c2luZyBvbiBjb3JvbmFyeSBhcnRlcnkgZGlzZWFzZSAoQ0FEKS4gCgpBIG1ham9yIGNvbXBvbmVudCBvZiBtb2Rlcm4tZGF5IEdXQVMgaXMgW2dlbmV0aWMgaW1wdXRhdGlvbl0oaHR0cHM6Ly93d3cubmF0dXJlLmNvbS9hcnRpY2xlcy9ucmcyNzk2KXt0YXJnZXQ9Il9ibGFuayJ9LCBidXQgZm9yIHByYWN0aWNhbCByZWFzb25zIGl0IGlzIG5vdCBwYXJ0IG9mIHRoaXMgYm9vay4gSG93ZXZlciwgSSB3aWxsIHByb3ZpZGUgc29tZSBwb2ludGVycyBhcyB0byBob3cgdG8gZ28gYWJvdXQgZG8gdGhpcyB3aXRoIG1pbmltYWwgY29kaW5nIG9yIHNjcmlwdGluZyBleHBlcmllbmNlLiBMaWtld2lzZSwgdGhlIGNvdXJzZXMgZG9lcyBub3QgY292ZXIgdGhlIGFzcGVjdHMgb2YgbWV0YS1hbmFseXNlcyBvZiBHV0FTLCBidXQgc29tZSBleGNlbGxlbnQgcmVzb3VyY2VzIGV4aXN0IHRvIHdoaWNoIEkgd2lsbCBkaXJlY3QuIEFzIHRoaXMgcHJhY3RpY2FsIHByaW1lciBldm9sdmVzLCB0aGVzZSBhbmQgb3RoZXIgdG9waWNzIG1heSBmaW5kIHRoZWlyIHBsYWNlIGluIHRoaXMgYm9vay4gCkkgc2hvdWxkIGFsc28gcG9pbnQgb3V0IHRoYXQgZW1waGFzaXMgb2YgdGhpcyBib29rIGlzIG9uIGl0IGJlaW5nIGEgX3ByYWN0aWNhbCBwcmltZXJfLiBJdCBpcyBpbnRlbmRlZCB0byBwcm92aWRlIHNvbWUgcHJhY3RpY2FsIGd1aWRhbmNlIHRvIGRvaW5nIEdXQVMsIGFuZCB3aGlsZSB0aGVvcnkgaXMgaW1wb3J0YW50LCBJIHdpbGwgbm90IGNvdmVyIHRoaXMuIEFnYWluLCBzb21lIHZlcnkgdXNlZnVsIGFuZCBleGNlbGxlbnQgd29yayBleGlzdHMgdG8gd2hpY2ggSSB3aWxsIHBvaW50IHlvdSwgYnV0IEkgcmVhbGx5IHdhbnQgeW91IHRvIGxlYXJuIC0gYW5kIHVuZGVyc3RhbmQgdGhlIHRoZW9yeSAtIGJ5IF9kb2luZ18uIAoKU28sIGFsdGhvdWdoIG9yaWdpbmFsbHkgY3JhZnRlZCBhcyBhIGNvbXBhbmlvbiBmb3IgdGhlIGNvdXJzZSwgdGhpcyBwcmFjdGljYWwgZ3VpZGUgc3RhbmRzIG9uIGl0cyBvd24gYXMgYSBjb21wcmVoZW5zaXZlIHJlc291cmNlIGZvciBkaXZpbmcgaW50byBhbGwgZmFjZXRzIG9mIGRvaW5nIGEgR1dBUyDigJQgc2F2ZSBmb3IgZXhwZXJpbWVudGFsIGZvbGxvdy11cCwgb2YgY291cnNlIPCfmIkuCgpJIGNhbiBpbWFnaW5lIHRoaXMgc2VlbXMgb3ZlcndoZWxtaW5nLCBidXQgdHJ1c3QgbWUsIHlvdSdsbCBiZSBva2F5LiBKdXN0IGZvbGxvdyB0aGlzIHByYWN0aWNhbC4gWW91J2xsIGxlYXJuIGJ5IGRvaW5nIGFuZCBhdCB0aGUgZW5kIG9mIHRoZSBkYXksIHlvdSBjYW4gZXhlY3V0ZSBhIEdXQVMgaW5kZXBlbmRlbnRseS4KCioqUmVhZHkgdG8gc3RhcnQ/KioKCjwhLS0gWW91ciBmaXJzdCBwb2ludCBvZiBhY3Rpb24gaXMgdG8gcHJlcGFyZSB5b3VyIHN5c3RlbSBmb3IgdGhpcyBjb3Vyc2UgaW4gQ2hhcHRlciBcQHJlZihzb21lYmFja2dyb3VuZHJlYWRpbmcpLiAtLT4KCjxzY3JpcHQ+CnRpdGxlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZWFkZXInKTsKdGl0bGUuaW5uZXJIVE1MID0gJzxpbWcgc3JjPSJpbWcvX2hlYWRlcnMvYmFubmVyX21hbl9zdGFuZGluZ19kbmEucG5nIiBhbHQ9IkEgUHJhY3RpY2FsIFByaW1lciBpbiBIdW1hbiBDb21wbGV4IEdlbmV0aWNzIj4nICsgdGl0bGUuaW5uZXJIVE1MCjwvc2NyaXB0PgoKPCEtLWNoYXB0ZXI6ZW5kOmluZGV4LlJtZC0tPgoKIyBTdGVwcyBpbiBhIEdlbm9tZS1XaWRlIEFzc29jaWF0aW9uIFN0dWR5IHsjZ3dhcy1iYXNpY3N9CjwhLS0gIVtdKC4vaW1nL19oZWFkZXJzL3dvbWFuX3dvcmtpbmdfb25fY29kZS5wbmcpe3dpZHRoPTEwMCV9IC0tPgoKCgoKCgpOb3cgdGhhdCB5b3UgdW5kZXJzdGFuZCBhIGJpdCBvZiB0aGUgbmF2aWdhdGlvbiBpbiBVbml4LXN5c3RlbXMsIHlvdSdyZSByZWFkeSB0byBzdGFydCB0aGlzIHByYWN0aWNhbCBwcmltZXIuIFdlIHdpbGwgbWFrZSB1c2Ugb2YgYSBkdW1teSBkYXRhc2V0IGNvbnRhaW5pbmcgY2FzZXMgYW5kIGNvbnRyb2xzLiBXZSB3aWxsIGV4cGxhaW4gYW5kIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyBzdGVwczoKCjEuIGNvbnZlcnQgcmF3IGRhdGEgdG8gYSBtb3JlIG1lbW9yeS1lZmZpY2llbnQgZm9ybWF0CjIuIGFwcGx5IGV4dGVuc2l2ZSBxdWFsaXR5IGNvbnRyb2wgb24gc2FtcGxlcyBhbmQgU05QcwozLiBhc3Nlc3MgdGhlIGFuY2VzdHJhbCBiYWNrZ3JvdW5kIG9mIHlvdXIgc3R1ZHkgcG9wdWxhdGlvbgo0LiBwZXJmb3JtIGFzc29jaWF0aW9uIHRlc3RpbmcKNS4gdmlzdWFsaXplIGFzc29jaWF0aW9uIHJlc3VsdHMKCgojIyBDb252ZXJ0aW5nIGRhdGFzZXRzCgpUaGUgZm9ybWF0IGluIHdoaWNoIGdlbm90eXBlIGRhdGEgYXJlIHJldHVybmVkIHRvIGludmVzdGlnYXRvcnMgdmFyaWVzIGFtb25nIGdlbm9tZS13aWRlIFNOUCBwbGF0Zm9ybXMgYW5kIGdlbm90eXBpbmcgY2VudGVycy4gVXN1YWxseSBnZW5vdHlwZXMgaGF2ZSBiZWVuIGNhbGxlZCBieSBhIGdlbm90eXBpbmcgY2VudGVyIGFuZCByZXR1cm5lZCBpbiB0aGUgc3RhbmRhcmQgYFBFRGAgYW5kIGBNQVBgIGZpbGUgZm9ybWF0cyBkZXNpZ25lZCBmb3IgYFBMSU5LYC4KCkEgYFBFRGAgZmlsZSBpcyBhIHdoaXRlIHNwYWNlIChzcGFjZSBvciB0YWIpLWRlbGltaXRlZCBmaWxlIGluIHdoaWNoIGVhY2ggbGluZSByZXByZXNlbnRzIG9uZSBpbmRpdmlkdWFsIGFuZCB0aGUgZmlyc3Qgc2l4IGNvbHVtbnMgYXJlIG1hbmRhdG9yeSBhbmQgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKCi0gJ0ZhbWlseSBJRCcsIAotICdJbmRpdmlkdWFsIElEJywgCi0gJ1BhdGVybmFsIElEJywgCi0gJ01hdGVybmFsIElEJywgCi0gJ1NleCAoMT1tYWxlLCAyPWZlbWFsZSwgMD1taXNzaW5nKScsIGFuZCAKLSAnUGhlbm90eXBlICgxPXVuYWZmZWN0ZWQsIDI9YWZmZWN0ZWQsIDA9bWlzc2luZyknLiAKClRoZSBzdWJzZXF1ZW50IGNvbHVtbnMgZGVub3RlIGdlbm90eXBlcyB0aGF0IGNhbiBiZSBhbnkgY2hhcmFjdGVyIChlLmcuLCAxLCAyLCAzLCA0IG9yIEEsIEMsIEcsIFQpLiBaZXJvIGRlbm90ZXMgYSBtaXNzaW5nIGdlbm90eXBlLiBFYWNoIFNOUCBtdXN0IGhhdmUgdHdvIGFsbGVsZXMgKGkuZS4sIGJvdGggYWxsZWxlcyBhcmUgZWl0aGVyIHByZXNlbnQgb3IgYWJzZW50KS4gClRoZSBvcmRlciBvZiBTTlBzIGluIHRoZSBQRUQgZmlsZSBpcyBnaXZlbiBpbiB0aGUgTUFQIGZpbGUsIGluIHdoaWNoIGVhY2ggbGluZSBkZW5vdGVzIGEgc2luZ2xlIG1hcmtlciBhbmQgdGhlIGZvdXIgd2hpdGUtc3BhY2XigJNzZXBhcmF0ZWQgY29sdW1ucyBhcmUgY2hyb21vc29tZSAoMeKAkzIyLCBYLCBZIG9yIDAgZm9yIHVucGxhY2VkKSwgbWFya2VyIG5hbWUgKHR5cGljYWxseSBhbiBycyBudW1iZXIpLCBnZW5ldGljIGRpc3RhbmNlIGluIE1vcmdhbnMgKHRoaXMgY2FuIGJlIGZpeGVkIHRvIDApIGFuZCBiYXNlLXBhaXIgcG9zaXRpb24gKGJwIHVuaXRzKS4KCkxldCdzIHN0YXJ0IGJ5IHVzaW5nIGBQTElOS2AgdG8gY29udmVydGluZyB0aGUgZGF0YXNldHMgdG8gYSBsaWdodGVyLCBiaW5hcnkgZm9ybSAoYSBgLmJlZGAtZmlsZSkuIFRoaXMgZmlsZSBzYXZlcyBkYXRhIGluIGEgbW9yZSBtZW1vcnktIGFuZCB0aW1lLWVmZmljaWVudCBtYW5uZXIgKGluIGEgJ2JpbmFyeSctZm9ybWF0KSB0byBmYWNpbGl0YXRlIHRoZSBhbmFseXNpcyBvZiBsYXJnZS1zY2FsZSBkYXRhIHNldHMgW0BwdXJjZWxsMjAwN10uIFRoZSBtYXJrZXItaW5mb3JtYXRpb24gaXMgc3RvcmVkIGluIHRoZSBgLmJpbWAtZmlsZSBhbmQgdGhlIGZhbWlseSBpbmZvcm1hdGlvbiBpbiB0aGUgYC5mYW1gLWZpbGUuIGBQTElOS2AgY3JlYXRlcyBhIGAubG9nYCBmaWxlIChuYW1lZCBgcmF3LUdXQS1kYXRhLmxvZ2ApIHRoYXQgZGV0YWlscyAoYW1vbmcgb3RoZXIgaW5mb3JtYXRpb24pIHRoZSBpbXBsZW1lbnRlZCBjb21tYW5kcywgdGhlIG51bWJlciBvZiBjYXNlcyBhbmQgY29udHJvbHMgaW4gdGhlIGlucHV0IGZpbGVzLCBhbnkgZXhjbHVkZWQgZGF0YSBhbmQgdGhlIGdlbm90eXBpbmcgcmF0ZSBpbiB0aGUgcmVtYWluaW5nIGRhdGEuIFRoaXMgZmlsZSBpcyB2ZXJ5IHVzZWZ1bCBmb3IgY2hlY2tpbmcgd2hldGhlciB0aGUgc29mdHdhcmUgaXMgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRpbmcgY29tbWFuZHMuCgpNYWtlIHN1cmUgeW91IGFyZSBpbiB0aGUgcmlnaHQgZGlyZWN0b3J5LiBEbyB5b3UgcmVtZW1iZXIgaG93IHRvIGdldCB0aGVyZT8KCmBgYApjZCB+L0Rlc2t0b3AvcHJhY3RpY2FsCmBgYAoKTmV4dCwgd2UnbGwgbWFrZSBhIHByb2plY3QgZGlyZWN0b3J5LgoKYGBgCm1rZGlyIC12IH4vRGVza3RvcC9wcmFjdGljYWwvZHVtbXlfcHJvamVjdApgYGAKCk5vdywgd2UnbGwgY29udmVydCB0aGUgYC5wZWRgL2AubWFwYCBmaWxlcyB0byB0aGUgYmluYXJ5LWZvcm1hdC4KCmBgYApwbGluayAtLWZpbGUgcmF3ZGF0YS9yYXctR1dBLWRhdGEgLS1tYWtlLWJlZCAtLW91dCBkdW1teV9wcm9qZWN0L3Jhd2RhdGEKYGBgCgpMZXQncyByZXZpZXcgdGhlIGAubG9nYC1maWxlIGZvciBhIGJpdC4gSXQgc2hvdWxkIGxvb2sgc29tZXRoaW5nIGxpa2UgdGhpczoKCmBgYApQTElOSyB2MS45MGI3LjIgNjQtYml0ICgxMSBEZWMgMjAyMykgICAgICAgICAgIHd3dy5jb2ctZ2Vub21pY3Mub3JnL3BsaW5rLzEuOS8KKEMpIDIwMDUtMjAyMyBTaGF1biBQdXJjZWxsLCBDaHJpc3RvcGhlciBDaGFuZyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYzCkxvZ2dpbmcgdG8gZHVtbXlfcHJvamVjdC9yYXdkYXRhLmxvZy4KT3B0aW9ucyBpbiBlZmZlY3Q6CiAgLS1maWxlIHJhd2RhdGEvcmF3LUdXQS1kYXRhCiAgLS1tYWtlLWJlZAogIC0tb3V0IGR1bW15X3Byb2plY3QvcmF3ZGF0YQoKMTYzODQgTUIgUkFNIGRldGVjdGVkOyByZXNlcnZpbmcgODE5MiBNQiBmb3IgbWFpbiB3b3Jrc3BhY2UuCi5wZWQgc2NhbiBjb21wbGV0ZSAoZm9yIGJpbmFyeSBhdXRvY29udmVyc2lvbikuClBlcmZvcm1pbmcgc2luZ2xlLXBhc3MgLmJlZCB3cml0ZSAoMzE3NTAzIHZhcmlhbnRzLCAyMDAwIHBlb3BsZSkuCi0tZmlsZTogZHVtbXlfcHJvamVjdC9yYXdkYXRhLXRlbXBvcmFyeS5iZWQgKwpkdW1teV9wcm9qZWN0L3Jhd2RhdGEtdGVtcG9yYXJ5LmJpbSArIGR1bW15X3Byb2plY3QvcmF3ZGF0YS10ZW1wb3JhcnkuZmFtCndyaXR0ZW4uCjMxNzUwMyB2YXJpYW50cyBsb2FkZWQgZnJvbSAuYmltIGZpbGUuCjIwMDAgcGVvcGxlICg5OTcgbWFsZXMsIDEwMDMgZmVtYWxlcykgbG9hZGVkIGZyb20gLmZhbS4KMjAwMCBwaGVub3R5cGUgdmFsdWVzIGxvYWRlZCBmcm9tIC5mYW0uClVzaW5nIDEgdGhyZWFkIChubyBtdWx0aXRocmVhZGVkIGNhbGN1bGF0aW9ucyBpbnZva2VkKS4KQmVmb3JlIG1haW4gdmFyaWFudCBmaWx0ZXJzLCAyMDAwIGZvdW5kZXJzIGFuZCAwIG5vbmZvdW5kZXJzIHByZXNlbnQuCkNhbGN1bGF0aW5nIGFsbGVsZSBmcmVxdWVuY2llcy4uLiBkb25lLgpXYXJuaW5nOiAxMTQ0MCBoZXQuIGhhcGxvaWQgZ2Vub3R5cGVzIHByZXNlbnQgKHNlZSBkdW1teV9wcm9qZWN0L3Jhd2RhdGEuaGggKTsKbWFueSBjb21tYW5kcyB0cmVhdCB0aGVzZSBhcyBtaXNzaW5nLgpUb3RhbCBnZW5vdHlwaW5nIHJhdGUgaXMgMC45ODU2ODIuCjMxNzUwMyB2YXJpYW50cyBhbmQgMjAwMCBwZW9wbGUgcGFzcyBmaWx0ZXJzIGFuZCBRQy4KQW1vbmcgcmVtYWluaW5nIHBoZW5vdHlwZXMsIDEwMjMgYXJlIGNhc2VzIGFuZCA5NzcgYXJlIGNvbnRyb2xzLgotLW1ha2UtYmVkIHRvIGR1bW15X3Byb2plY3QvcmF3ZGF0YS5iZWQgKyBkdW1teV9wcm9qZWN0L3Jhd2RhdGEuYmltICsKZHVtbXlfcHJvamVjdC9yYXdkYXRhLmZhbSAuLi4gZG9uZS4KYGBgCgpTbywgdGhlcmUgYXJlIDMxNyw1MDMgdmFyaWFudHMgaW5jbHVkZWQgZm9yIDIsMDAwIHBlb3BsZSwgOTk3IG1hbGVzIGFuZCAxLDAwMyBmZW1hbGVzLiBBbGwgb2YgdGhlc2UgaW5kaXZpZHVhbHMgYXJlIFsnZm91bmRlcnMnXShodHRwczovL3d3dy5jb2ctZ2Vub21pY3Mub3JnL3BsaW5rLzEuOS9maWx0ZXIjbm9uZm91bmRlcnMpe3RhcmdldD0iX2JsYW5rIn0uIFRoZXJlIGFyZSAxLDAyMyBjYXNlcyBhbmQgOTc3IGNvbnRyb2xzLiBUaGUgZ2Vub3R5cGluZyByYXRlIGlzIGFib3V0IDk4LjYlIHdoaWNoIGlzIHByZXR0eSBnb29kLiBMYXN0bHksIHRoZXJlIGFyZSAxMSw0NDAgaGV0ZXJvenlnb3VzIGhhcGxvaWQgZ2Vub3R5cGVzIHByZXNlbnQuCgo+IFF1ZXN0aW9uOiBDYW4geW91IHRoaW5rIG9mZiB3aGF0IHRoZSAnMTEsNDQwIGhldGVyb3p5Z291cyBoYXBsb2lkIGdlbm90eXBlcyBwcmVzZW50JyByZXByZXNlbnQ/IAoKCiMjIFF1YWxpdHkgY29udHJvbAoKV2UgYXJlIHJlYWR5IGZvciBzb21lIHF1YWxpdHkgY29udHJvbCBhbmQgcXVhbGl0eSBhc3N1cmFuY2UsIGhlYXZpbHkgaW5zcGlyZWQgYnkgQW5kZXJzb24gX2V0IGFsLl8gW0BhbmRlcnNvbjIwMTBdIGFuZCBMYXVyaWUgX2V0IGFsLl8gW0BsYXVyaWUyMDEwXS4gSW4gZ2VuZXJhbCwgd2Ugc2hvdWxkIGNoZWNrIG91dCBhIGNvdXBsZSBvZiB0aGluZ3MgcmVnYXJkaW5nIHRoZSBkYXRhIHF1YWxpdHkgb24gdHdvIGxldmVsczoKCjEpIHNhbXBsZXMKMikgdmFyaWFudHMKClNvLCB3ZSB3aWxsIGludmVzdGlnYXRlIHRoZSBmb2xsb3dpbmc6CgotIEFyZSB0aGUgKnNleGVzKiBiYXNlZCBvbiBnZW5ldGljIGRhdGEgbWF0Y2hpbmcgdGhlIG9uZXMgZ2l2ZW4gYnkgdGhlIHBoZW5vdHlwZSBmaWxlPwotIElkZW50aWZ5IGluZGl2aWR1YWxzIHRoYXQgYXJlIG91dGxpZXJzIGluIHRlcm1zIG9mIG1pc3NpbmcgZGF0YSAoX2NhbGwgcmF0ZV8pIG9yIGhldGVyb3p5Z29zaXR5IHJhdGVzLiBUaGlzIGNvdWxkIGluZGljYXRlIGEgZ2Vub3R5cGluZyBlcnJvciBvciBzYW1wbGUgc3dhcC4KLSBJZGVudGlmeSBkdXBsaWNhdGVkIG9yIHJlbGF0ZWQgaW5kaXZpZHVhbHMuCi0gSWRlbnRpZnkgaW5kaXZpZHVhbHMgd2l0aCBkaXZlcmdlbnQgYW5jZXN0cnkuCi0gV2hhdCBhcmUgdGhlIGFsbGVsZSBmcmVxdWVuY2llcz8KLSBXaGF0IGlzIHRoZSBwZXItU05QIGNhbGwgcmF0ZT8KLSBJbiB0aGUgY2FzZSBvZiBhIGNhc2UtY29udHJvbCBzdHVkeSAod2hpY2ggaXMgdGhlIGNhc2UgaGVyZSksIHdlIG5lZWQgdG8gY2hlY2sgZGlmZmVyZW50aWFsIG1pc3NpbmduZXNzIGJldHdlZW4gY2FzZXMgYW5kIGNvbnRyb2xzLiAKCj4gUXVlc3Rpb246IENhbiB5b3UgdGhpbmsgb2Ygb3RoZXIgc2NlbmFyaW9zIGluIHdoaWNoIHlvdSBtYXkgd2FudCB0byBleHRlbmQgdGhlIGNoZWNrIG9uIGRpZmZlcmVudGlhbCBtaXNzaW5nbmVzcyBiZXlvbmQgYSBjaGVjayBiZXR3ZWVuIGNhc2VzIGFuZCBjb250cm9scz8KCgojIyBMZXQncyBnZXQgb3VyIGhhbmRzIGRpcnR5CgpBbGwgY2xlYXI/IExldCdzIHN0YXJ0IHRoZSB3b3JrLiBPbiB0byBzdGVwIDEgb2YgdGhlIFFDIGZvciBHV0FTOiBmaWx0ZXIgc2FtcGxlcyBvZiBwb29yIHF1YWxpdHkgaW4gQ2hhcHRlciBcQHJlZihnd2FzLWJhc2ljcy1zYW1wbGUtcWMpLgoKPCEtLSBgYGB7anMsIGVjaG8gPSBGQUxTRX0gLS0+CjwhLS0gdGl0bGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlYWRlcicpOyAtLT4KPCEtLSB0aXRsZS5pbm5lckhUTUwgPSAnPGltZyBzcmM9ImltZy9faGVhZGVycy93b21hbl93b3JraW5nX29uX2NvZGUucG5nIiBhbHQ9IkdXQVMgYmFzaWNzIj4nICsgdGl0bGUuaW5uZXJIVE1MIC0tPgo8IS0tIGBgYCAtLT4KCjwhLS1jaGFwdGVyOmVuZDowM18xX2d3YXNfYmFzaWNzLlJtZC0tPgoKIyBTYW1wbGUgUUMgeyNnd2FzLWJhc2ljcy1zYW1wbGUtcWN9CjwhLS0gIVtdKC4vaW1nL19nd2FzX2R1bW15L2d3YXNfc2FtcGxlX3FjLnBuZyl7d2lkdGg9NzAlfSAtLT4KCgoKCgoKTGV0J3Mgc3RhcnQgd2l0aCB0aGUgcGVyLXNhbXBsZSBxdWFsaXR5IGNvbnRyb2wuIFRoZSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgYWxsIHRoZSBzYW1wbGVzIHRoYXQgZm9yIHNvbWUgcmVhc29uIChtZW50aW9uZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24pIHNob3VsZCBiZSBleGNsdWRlZC4gCgojIyBTZXgKV2UgbmVlZCB0byBpZGVudGlmeSBvZiBpbmRpdmlkdWFscyB3aXRoIGRpc2NvcmRhbnQgc2V4IGluZm9ybWF0aW9uIGNvbXBhcmluZyBwaGVub3R5cGljIGFuZCBnZW5vdHlwaWMgZGF0YS4gTGV0J3MgY2FsY3VsYXRlIHRoZSBtZWFuIGhvbW96eWdvc2l0eSByYXRlIGFjcm9zcyBYLWNocm9tb3NvbWUgbWFya2VycyBmb3IgZWFjaCBpbmRpdmlkdWFsIGluIHRoZSBzdHVkeS4KCmBgYApwbGluayAtLWJmaWxlIGR1bW15X3Byb2plY3QvcmF3ZGF0YSAtLWNoZWNrLXNleCAtLW91dCBkdW1teV9wcm9qZWN0L3Jhd2RhdGEKYGBgCgpUaGlzIHByb2R1Y2VzIGEgZmlsZSB3aXRoIHRoZSBmb2xsb3dpbmcgY29sdW1uczoKCi0gX0ZJRF8JRmFtaWx5IElECi0gX0lJRF8JV2l0aGluLWZhbWlseSBJRAotIF9QRURTRVhfCVNleCBjb2RlIGluIGlucHV0IGZpbGUKLSBfU05QU0VYXwlJbXB1dGVkIHNleCBjb2RlICgxID0gbWFsZSwgMiA9IGZlbWFsZSwgMCA9IHVua25vd24pCi0gX1NUQVRVU18JJ09LJyBpZiBQRURTRVggYW5kIFNOUFNFWCBtYXRjaCBhbmQgYXJlIG5vbnplcm8sICdQUk9CTEVNJyBvdGhlcndpc2UKLSBfRl8JSW5icmVlZGluZyBjb2VmZmljaWVudCwgY29uc2lkZXJpbmcgb25seSBYIGNocm9tb3NvbWUuIE5vdCBwcmVzZW50IHdpdGggJ3ktb25seScuCi0gX1lDT1VOVF8JTnVtYmVyIG9mIG5vbm1pc3NpbmcgZ2Vub3R5cGUgY2FsbHMgb24gWSBjaHJvbW9zb21lLiBSZXF1aXJlcyAneWNvdW50Jy8neS1vbmx5Jy4KCgpXZSBuZWVkIHRvIGdldCBhIGxpc3Qgb2YgaW5kaXZpZHVhbHMgd2l0aCBkaXNjb3JkYW50IHNleCBkYXRhLgoKYGBgCmNhdCBkdW1teV9wcm9qZWN0L3Jhd2RhdGEuc2V4Y2hlY2sgfCBhd2sgJyQ1ID09IlNUQVRVUyIgfHwgJDUgPT0iUFJPQkxFTSInICA+IGR1bW15X3Byb2plY3QvcmF3ZGF0YS5zZXhwcm9icy50eHQKYGBgCgpMZXQncyBoYXZlIGEgbG9vayBhdCB0aGUgcmVzdWx0cy4KCmBgYApjYXQgZHVtbXlfcHJvamVjdC9yYXdkYXRhLnNleHByb2JzLnR4dApgYGAKCgoKCgoKYGBgez1odG1sfQo8ZGl2IGNsYXNzPSJ0YWJ3aWQiPjxzdHlsZT4uY2wtZTBkMWVmMDh7fS5jbC1lMGNjMDMyY3tmb250LWZhbWlseTonSGVsdmV0aWNhJztmb250LXNpemU6MTFwdDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHlsZTpub3JtYWw7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6cmdiYSgwLCAwLCAwLCAxLjAwKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O30uY2wtZTBjZTI3NmF7bWFyZ2luOjA7dGV4dC1hbGlnbjpyaWdodDtib3JkZXItYm90dG9tOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7cGFkZGluZy1ib3R0b206NXB0O3BhZGRpbmctdG9wOjVwdDtwYWRkaW5nLWxlZnQ6NXB0O3BhZGRpbmctcmlnaHQ6NXB0O2xpbmUtaGVpZ2h0OiAxO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7fS5jbC1lMGNlMjc3NHttYXJnaW46MDt0ZXh0LWFsaWduOmxlZnQ7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO3BhZGRpbmctYm90dG9tOjVwdDtwYWRkaW5nLXRvcDo1cHQ7cGFkZGluZy1sZWZ0OjVwdDtwYWRkaW5nLXJpZ2h0OjVwdDtsaW5lLWhlaWdodDogMTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O30uY2wtZTBjZTM4YzJ7d2lkdGg6MC41NjhpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMS41cHQgc29saWQgcmdiYSgxMDIsIDEwMiwgMTAyLCAxLjAwKTtib3JkZXItdG9wOiAxLjVwdCBzb2xpZCByZ2JhKDEwMiwgMTAyLCAxMDIsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTBjZTM4YzN7d2lkdGg6MC44MDVpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMS41cHQgc29saWQgcmdiYSgxMDIsIDEwMiwgMTAyLCAxLjAwKTtib3JkZXItdG9wOiAxLjVwdCBzb2xpZCByZ2JhKDEwMiwgMTAyLCAxMDIsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTBjZTM4YzR7d2lkdGg6MC45MzJpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMS41cHQgc29saWQgcmdiYSgxMDIsIDEwMiwgMTAyLCAxLjAwKTtib3JkZXItdG9wOiAxLjVwdCBzb2xpZCByZ2JhKDEwMiwgMTAyLCAxMDIsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTBjZTM4Y2N7d2lkdGg6MC42NTJpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMS41cHQgc29saWQgcmdiYSgxMDIsIDEwMiwgMTAyLCAxLjAwKTtib3JkZXItdG9wOiAxLjVwdCBzb2xpZCByZ2JhKDEwMiwgMTAyLCAxMDIsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTBjZTM4Y2R7d2lkdGg6MC41NjhpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUwY2UzOGNle3dpZHRoOjAuODA1aW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMGNlMzhkNnt3aWR0aDowLjkzMmluO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTBjZTM4ZDd7d2lkdGg6MC42NTJpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUwY2UzOGQ4e3dpZHRoOjAuNTY4aW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDEuNXB0IHNvbGlkIHJnYmEoMTAyLCAxMDIsIDEwMiwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTBjZTM4ZTB7d2lkdGg6MC44MDVpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMS41cHQgc29saWQgcmdiYSgxMDIsIDEwMiwgMTAyLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMGNlMzhlMXt3aWR0aDowLjkzMmluO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAxLjVwdCBzb2xpZCByZ2JhKDEwMiwgMTAyLCAxMDIsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUwY2UzOGUye3dpZHRoOjAuNjUyaW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDEuNXB0IHNvbGlkIHJnYmEoMTAyLCAxMDIsIDEwMiwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO308L3N0eWxlPjx0YWJsZSBkYXRhLXF1YXJ0by1kaXNhYmxlLXByb2Nlc3Npbmc9J3RydWUnIGNsYXNzPSdjbC1lMGQxZWYwOCc+CgpgYGAKCjxjYXB0aW9uIHN0eWxlPSJkaXNwbGF5OnRhYmxlLWNhcHRpb247Ij4oXCN0YWI6c2V4aXNzdWVzKTxzcGFuPlNleCBpc3N1ZXMuPC9zcGFuPjwvY2FwdGlvbj4KCmBgYHs9aHRtbH0KCjx0aGVhZD48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0aCBjbGFzcz0iY2wtZTBjZTM4YzIiPjxwIGNsYXNzPSJjbC1lMGNlMjc2YSI+PHNwYW4gY2xhc3M9ImNsLWUwY2MwMzJjIj5GSUQ8L3NwYW4+PC9wPjwvdGg+PHRoIGNsYXNzPSJjbC1lMGNlMzhjMiI+PHAgY2xhc3M9ImNsLWUwY2UyNzZhIj48c3BhbiBjbGFzcz0iY2wtZTBjYzAzMmMiPklJRDwvc3Bhbj48L3A+PC90aD48dGggY2xhc3M9ImNsLWUwY2UzOGMzIj48cCBjbGFzcz0iY2wtZTBjZTI3NmEiPjxzcGFuIGNsYXNzPSJjbC1lMGNjMDMyYyI+UEVEU0VYPC9zcGFuPjwvcD48L3RoPjx0aCBjbGFzcz0iY2wtZTBjZTM4YzMiPjxwIGNsYXNzPSJjbC1lMGNlMjc2YSI+PHNwYW4gY2xhc3M9ImNsLWUwY2MwMzJjIj5TTlBTRVg8L3NwYW4+PC9wPjwvdGg+PHRoIGNsYXNzPSJjbC1lMGNlMzhjNCI+PHAgY2xhc3M9ImNsLWUwY2UyNzc0Ij48c3BhbiBjbGFzcz0iY2wtZTBjYzAzMmMiPlNUQVRVUzwvc3Bhbj48L3A+PC90aD48dGggY2xhc3M9ImNsLWUwY2UzOGNjIj48cCBjbGFzcz0iY2wtZTBjZTI3NmEiPjxzcGFuIGNsYXNzPSJjbC1lMGNjMDMyYyI+Rjwvc3Bhbj48L3A+PC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0ciBzdHlsZT0ib3ZlcmZsb3ctd3JhcDpicmVhay13b3JkOyI+PHRkIGNsYXNzPSJjbC1lMGNlMzhjZCI+PHAgY2xhc3M9ImNsLWUwY2UyNzZhIj48c3BhbiBjbGFzcz0iY2wtZTBjYzAzMmMiPjc3Mjwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwY2UzOGNkIj48cCBjbGFzcz0iY2wtZTBjZTI3NmEiPjxzcGFuIGNsYXNzPSJjbC1lMGNjMDMyYyI+NzcyPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTBjZTM4Y2UiPjxwIGNsYXNzPSJjbC1lMGNlMjc2YSI+PHNwYW4gY2xhc3M9ImNsLWUwY2MwMzJjIj4yPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTBjZTM4Y2UiPjxwIGNsYXNzPSJjbC1lMGNlMjc2YSI+PHNwYW4gY2xhc3M9ImNsLWUwY2MwMzJjIj4wPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTBjZTM4ZDYiPjxwIGNsYXNzPSJjbC1lMGNlMjc3NCI+PHNwYW4gY2xhc3M9ImNsLWUwY2MwMzJjIj5QUk9CTEVNPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTBjZTM4ZDciPjxwIGNsYXNzPSJjbC1lMGNlMjc2YSI+PHNwYW4gY2xhc3M9ImNsLWUwY2MwMzJjIj4wLjMwODQ8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBjZTM4Y2QiPjxwIGNsYXNzPSJjbC1lMGNlMjc2YSI+PHNwYW4gY2xhc3M9ImNsLWUwY2MwMzJjIj44NTM8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMGNlMzhjZCI+PHAgY2xhc3M9ImNsLWUwY2UyNzZhIj48c3BhbiBjbGFzcz0iY2wtZTBjYzAzMmMiPjg1Mzwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwY2UzOGNlIj48cCBjbGFzcz0iY2wtZTBjZTI3NmEiPjxzcGFuIGNsYXNzPSJjbC1lMGNjMDMyYyI+Mjwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwY2UzOGNlIj48cCBjbGFzcz0iY2wtZTBjZTI3NmEiPjxzcGFuIGNsYXNzPSJjbC1lMGNjMDMyYyI+MDwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwY2UzOGQ2Ij48cCBjbGFzcz0iY2wtZTBjZTI3NzQiPjxzcGFuIGNsYXNzPSJjbC1lMGNjMDMyYyI+UFJPQkxFTTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwY2UzOGQ3Ij48cCBjbGFzcz0iY2wtZTBjZTI3NmEiPjxzcGFuIGNsYXNzPSJjbC1lMGNjMDMyYyI+MC4zNjY2PC9zcGFuPjwvcD48L3RkPjwvdHI+PHRyIHN0eWxlPSJvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7Ij48dGQgY2xhc3M9ImNsLWUwY2UzOGQ4Ij48cCBjbGFzcz0iY2wtZTBjZTI3NmEiPjxzcGFuIGNsYXNzPSJjbC1lMGNjMDMyYyI+MSw5MjA8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMGNlMzhkOCI+PHAgY2xhc3M9ImNsLWUwY2UyNzZhIj48c3BhbiBjbGFzcz0iY2wtZTBjYzAzMmMiPjEsOTIwPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTBjZTM4ZTAiPjxwIGNsYXNzPSJjbC1lMGNlMjc2YSI+PHNwYW4gY2xhc3M9ImNsLWUwY2MwMzJjIj4yPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTBjZTM4ZTAiPjxwIGNsYXNzPSJjbC1lMGNlMjc2YSI+PHNwYW4gY2xhc3M9ImNsLWUwY2MwMzJjIj4wPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTBjZTM4ZTEiPjxwIGNsYXNzPSJjbC1lMGNlMjc3NCI+PHNwYW4gY2xhc3M9ImNsLWUwY2MwMzJjIj5QUk9CTEVNPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTBjZTM4ZTIiPjxwIGNsYXNzPSJjbC1lMGNlMjc2YSI+PHNwYW4gY2xhc3M9ImNsLWUwY2MwMzJjIj4wLjQwNjY8L3NwYW4+PC9wPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+CmBgYAoKCldoZW4gdGhlIGhvbW96eWdvc2l0eSByYXRlIChfRl8pIGlzIG1vcmUgdGhhbiAwLjIsIGJ1dCBsZXNzIHRoYW4gMC44LCB0aGUgZ2Vub3R5cGUgZGF0YSBhcmUgaW5jb25jbHVzaXZlIHJlZ2FyZGluZyB0aGUgc2V4IG9mIGFuIGluZGl2aWR1YWwgYW5kIHRoZXNlIGFyZSBtYXJrZWQgaW4gY29sdW1uIF9TTlBTRVhfIHdpdGggYSAwLCBhbmQgdGhlIGNvbHVtbiBfU1RBVFVTXyAiUFJPQkxFTSIuCgpSZXBvcnQgdGhlIElEcyBvZiBpbmRpdmlkdWFscyB3aXRoIGRpc2NvcmRhbnQgc2V4IGluZm9ybWF0aW9uIChUYWJsZSBcQHJlZih0YWI6c2V4aXNzdWVzKSkgdG8gdGhvc2Ugd2hvIGNvbmR1Y3RlZCBzZXggcGhlbm90eXBpbmcuIEluIHNpdHVhdGlvbnMgaW4gd2hpY2ggZGlzY3JlcGFuY3kgY2Fubm90IGJlIHJlc29sdmVkLCBhZGQgdGhlIGZhbWlseSBJRCAoRklEKSBhbmQgaW5kaXZpZHVhbCBJRCAoSUlEKSBvZiB0aGUgc2FtcGxlcyB0byBhIGZpbGUgbmFtZWQgYGZhaWwtc2V4Y2hlY2stcWMudHh0YCAob25lIGluZGl2aWR1YWwgcGVyIGxpbmUsIHRhYiBkZWxpbWl0ZWQpLgoKYGBgCmdyZXAgIlBST0JMRU0iIGR1bW15X3Byb2plY3QvcmF3ZGF0YS5zZXhjaGVjayB8IGF3ayAneyBwcmludCAkMSwgJDJ9JyAgPiBkdW1teV9wcm9qZWN0L2ZhaWwtc2V4Y2hlY2stcWMudHh0CmBgYAoKIyMgU2FtcGxlIGNhbGwgcmF0ZXMKTGV0J3MgZ2V0IGFuIG92ZXJ2aWV3IG9mIHRoZSBtaXNzaW5nIGRhdGEgcGVyIHNhbXBsZSBhbmQgcGVyIFNOUC4KCmBgYApwbGluayAtLWJmaWxlIGR1bW15X3Byb2plY3QvcmF3ZGF0YSAtLW1pc3NpbmcgLS1vdXQgZHVtbXlfcHJvamVjdC9yYXdkYXRhCmBgYAoKVGhpcyBwcm9kdWNlcyB0d28gZmlsZXMsIGByYXdkYXRhL3Jhd2RhdGEuaW1pc3NgIGFuZCBgcmF3ZGF0YS9yYXdkYXRhLmxtaXNzYC4gSW4gdGhlIGAuaW1pc3NgLWZpbGUgdGhlIF9OX01JU1NfIGNvbHVtbiBkZW5vdGVzIHRoZSBudW1iZXIgb2YgbWlzc2luZyBTTlBzLCBhbmQgdGhlIF9GX01JU1NfIGNvbHVtbiBkZW5vdGVzIHRoZSBwcm9wb3J0aW9uIG9mIG1pc3NpbmcgU05QcyBwZXIgaW5kaXZpZHVhbC4KCgoKCgoKVGhlIGdyZXkgZGFzaGVkIGxpbmUgaW4gRmlndXJlIFxAcmVmKGZpZzpzaG93c2FtcGxlY2FsbHJhdGUpIGluZGljYXRlcyB0aGUgbWVhbiBjYWxsIHJhdGUsIHdoaWxlIHRoZSByZWQgZGFzaGVkIGxpbmUgaW5kaWNhdGVzIHRoZSB0aHJlc2hvbGQgd2UgaGFkIGRldGVybWluZWQgYWJvdmUuCgo8ZGl2IGNsYXNzPSJmaWd1cmUiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPgo8aW1nIHNyYz0iaW1nL19nd2FzX2R1bW15L2d3YXMtcWMtc2FtcGxlLWNhbGxyYXRlLnBuZyIgYWx0PSJQZXIgc2FtcGxlIGNhbGwgcmF0ZS4iIHdpZHRoPSI4NSUiIC8+CjxwIGNsYXNzPSJjYXB0aW9uIj4oXCNmaWc6c2hvd3NhbXBsZWNhbGxyYXRlKVBlciBzYW1wbGUgY2FsbCByYXRlLjwvcD4KPC9kaXY+CgoKIyMgSGV0ZXJvenlnb3NpdHkgcmF0ZQoKVG8gcHJvcGVybHkgY2FsY3VsYXRlIGhldGVyb3p5Z29zaXR5IHJhdGUgYW5kIHJlbGF0ZWRuZXNzIChpZGVudGl0eS1ieS1kZXNjZW50IFtJQkRdKSB3ZSBuZWVkIHRvIGRvIGZvdXIgdGhpbmdzOgoKMSkgcHJlLWNsZWFuIHRoZSBkYXRhIHRvIGdldCBhIGhpZ2gtcXVhbGl0eSBzZXQsCjIpIG9mIGluZGVwZW5kZW50IFNOUHMsCjMpIGV4Y2x1ZGUgbG9uZy1yYW5nZSBsaW5rYWdlIGRpc2VxdWlsaWJyaXVtIChMRCkgYmxvY2tzIHRoYXQgYmlhcyB3aXRoIHRoZXNlIGNhbGN1bGF0aW9ucywgYW5kCjQpIGV4Y2x1ZGUgQS9UIGFuZCBDL0cgU05QcyBhcyB0aGVzZSBtYXkgYmUgYW1iaXZhbGVudCBpbiBpbnRlcnByZXRhdGlvbiB3aGVuIGZyZXF1ZW5jaWVzIGJldHdlZW4gY2FzZXMgYW5kIGNvbnRyb2xzIGFyZSBjbG9zZSAoTUFGIMKxIDAuNDUpLAo1KSByZW1vdmUgYWxsIG5vbi1hdXRvc29tYWwgU05Qcy4KCllvdSBjYW4gZmluZCBhbiB1cC10by1kYXRlIGxpc3Qgb2YgTEQgYmxvY2tzIHlvdSBzaG91bGQgZXhjbHVkZSBpbiB0aGVzZSB0eXBlcyBvZiBhbmFseXNlcyBbaGVyZV0oaHR0cHM6Ly9nZW5vbWUuc3BoLnVtaWNoLmVkdS93aWtpL1JlZ2lvbnNfb2ZfaGlnaF9saW5rYWdlX2Rpc2VxdWlsaWJyaXVtXyhMRCkpe3RhcmdldD0iX2JsYW5rIn0gZm9yIHRoZSBkaWZmZXJlbnQgZ2Vub21lIGJ1aWxkcy4gSW4gdGhpcyBjYXNlIHdlIGFyZSB1c2luZyBidWlsZCAzNy4gRm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgYm9vayB3ZSBpbmNsdWRlZCBhIGZpbGUgd2l0aCB0aGVzZSByZWdpb25zIGluIHRoZSBgc3VwcG9ydGAtZGlyZWN0b3J5LgoKV2Ugd2lsbCB1c2UgdGhlIGZvbGxvd2luZyBzZXR0aW5nczoKCi0gcmVtb3ZlIEEvVCBhbmQgQy9HIFNOUHMgd2l0aCB0aGUgZmxhZyBgLS1leGNsdWRlIGR1bW15X3Byb2plY3QvYWxsLmF0Y2cudmFyaWFudHMudHh0YCwKLSBjYWxsIHJhdGUgPDElIHdpdGggdGhlIGZsYWcgYC0tZ2VubyAwLjEwYCwKLSBIYXJkeS1XZWluYmVyZyBFcXVpbGlicml1bSAoSFdFKSBwLXZhbHVlID4gMXgxMC0zIHdpdGggdGhlIGZsYWcgYC0taHdlIDFlLTNgLAotIGFuZCBNQUY+MTAlIHdpdGggdGhlIGZsYWcgYC0tbWFmIDAuMTAgYCwKLSBwcnVuZSB0aGUgZGF0YSB0byBvbmx5IHNlbGVjdCBpbmRlcGVuZGVudCBTTlBzICh3aXRoIGxvdyBMRCByXjIpIG9mIG9uZSBwYWlyIGVhY2ggd2l0aCBgcl4yID0gMC4yYCB3aXRoIHRoZSBmbGFncyBgLS1pbmRlcC1wYWlyd2lzZSAxMDAgMTAgMC4yYCBhbmQgYC0tZXh0cmFjdCByYXdkYXRhL3Jhdy1HV0EtZGF0YS5wcnVuZS5pbmAsCi0gU05QcyBpbiBsb25nLXJhbmdlIExEIHJlZ2lvbnMgKGZvciBleGFtcGxlOiBNSEMgY2hyIDYgMjUuOC0zNk1iLCBjaHIgOCBpbnZlcnNpb24gNi0xNk1iLCBjaHIxNyA0MC00NU1iLCBhbmQgYSBmZXcgbW9yZSkgd2l0aCB0aGUgZmxhZyBgLS1leGNsdWRlIHJhbmdlIHN1cHBvcnQvZXhjbHVkZV9wcm9ibGVtYXRpY19yYW5nZS50eHRgLAotIHJlbW92ZSBub24tYXV0b3NvbWFsIFNOUHMgd2l0aCB0aGUgZmxhZyBgLS1hdXRvc29tZWAuCgpGaXJzdCwgZ2V0IGEgbGlzdCBvZiBBL1QgYW5kIEMvRyBTTlBzLiBSZW1lbWJlciwgdGhlIGxpc3Qgb2YgbWFya2VycyBmb3IgdGhpcyBHV0FTIGlzIG5vdGVkIGluIHRoZSBgLmJpbWAgZmlsZS4gV2UgY2FuIHNpbXBseSBncmVwIGFsbCB0aGUgbGluZXMgd2hlcmUgdGhlIHR3byBhbGxlbGVzIGVpdGhlciBoYXZlIGFuIEEvVCBvciBDL0cgY29tYmluYXRpb24uCgpgYGAKY2F0IGR1bW15X3Byb2plY3QvcmF3ZGF0YS5iaW0gfCBcCmF3ayAnKCQ1ID09ICJBIiAmJiAkNiA9PSAiVCIpIHx8ICgkNSA9PSAiVCIgJiYgJDYgPT0gIkEiKSB8fCAoJDUgPT0gIkMiICYmICQ2ID09ICJHIikgfHwgKCQ1ID09ICJHIiAmJiAkNiA9PSAiQyIpJyB8IGF3ayAneyBwcmludCAkMiwgJDEsICQ0LCAkMywgJDUsICQ2IH0nIFwKPiBkdW1teV9wcm9qZWN0L2FsbC5hdGNnLnZhcmlhbnRzLnR4dApgYGAKClNlY29uZCwgY2xlYW4gdGhlIGRhdGEgYW5kIGdldCBhIGxpc3Qgb2YgaW5kZXBlbmRlbnQgU05Qcy4KCjwhLS0gKk5FWFQgWUVBUjogZnVydGhlciBleHBsYWluIHRoZSBleGFjdCBjb21tYW5kcyAgYW5kIGhvdyB0aGV5IHJlbGF0ZSB3aXRoIHRoZSBhYm92ZS4gSXMgdGhpcyBuZWVkZWQ/ICogLS0+CgpgYGAKcGxpbmsgLS1iZmlsZSBkdW1teV9wcm9qZWN0L3Jhd2RhdGEgXAotLWF1dG9zb21lIFwKLS1tYWYgMC4xMCAtLWdlbm8gMC4xMCAtLWh3ZSAxZS0zIFwKLS1pbmRlcC1wYWlyd2lzZSAxMDAgMTAgMC4yIFwKLS1leGNsdWRlIHJhbmdlIHN1cHBvcnQvZXhjbHVkZV9wcm9ibGVtYXRpY19yYW5nZS50eHQgXAotLW1ha2UtYmVkIC0tb3V0IGR1bW15X3Byb2plY3QvcmF3ZGF0YS5jbGVhbi50ZW1wCmBgYAoKPiBQbGVhc2Ugbm90ZSwgd2UgaGF2ZSBjcmVhdGUgYSBkYXRhc2V0IHdpdGhvdXQgdGFraW5nIGludG8gYWNjb3VudCBMRCBzdHJ1Y3R1cmUuIEhlbmNlLCB0aGUgbWVzc2FnZSAnUHJ1bmVkIDAgdmFyaWFudHMgZnJvbSBjaHJvbW9zb21lIDEsIGxlYXZpbmcgMTk0MjAuJyBldGMuIEluIGEgZGF0YXNldCB3aXRob3V0IGFueSBMRCBzdHJ1Y3R1cmUgdGhpcyBmbGFnIGAtLWluZGVwLXBhaXJ3aXNlIDEwMCAxMCAwLjJgIGRvZXNuJ3QgYWN0dWFsbHkgd29yay4gSG93ZXZlciwgd2l0aCByZWFsLWRhdGEgeW91IGNhbiB1c2UgaXQgdG8gcHJ1bmUgb3V0IHVud2FudGVkIFNOUHMgaW4gaGlnaCBMRC4KClRoaXJkLCBleGNsdWRlIHRoZSBwcnVuZWQgU05Qcy4gTm90ZSwgaG93IHdlIGluY2x1ZGUgYSBmaWxlIHRvIGV4Y2x1ZGUgaGlnaC1MRCBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhlIHByYWN0aWNhbC4KCmBgYApwbGluayAtLWJmaWxlIGR1bW15X3Byb2plY3QvcmF3ZGF0YS5jbGVhbi50ZW1wIFwKLS1leHRyYWN0IHJhd2RhdGEvcmF3LUdXQS1kYXRhLnBydW5lLmluIFwKLS1tYWtlLWJlZCAtLW91dCBkdW1teV9wcm9qZWN0L3Jhd2RhdGEuY2xlYW4udWx0cmFjbGVhbi50ZW1wCmBgYAoKRm91cnRoLCByZW1vdmUgdGhlIEEvVCBhbmQgQy9HIFNOUHMuCgpgYGAKcGxpbmsgLS1iZmlsZSBkdW1teV9wcm9qZWN0L3Jhd2RhdGEuY2xlYW4udWx0cmFjbGVhbi50ZW1wIFwKLS1leGNsdWRlIGR1bW15X3Byb2plY3QvYWxsLmF0Y2cudmFyaWFudHMudHh0IFwKLS1tYWtlLWJlZCAtLW91dCBkdW1teV9wcm9qZWN0L3Jhd2RhdGEuY2xlYW4udWx0cmFjbGVhbgpgYGAKCj4gUGxlYXNlIG5vdGUsIHRoaXMgZGF0YXNldCBkb2Vzbid0IGFjdHVhbGx5IGluY2x1ZGUgdGhpcyB0eXBlIG9mIFNOUCwgaGVuY2UgYHJhd2RhdGEvYWxsLmF0Y2cudmFyaWFudHMudHh0YCBpcyBlbXB0eSEgQWdhaW4sIHlvdSBjYW4gdXNlIHRoaXMgY29tbWFuZCBpbiByZWFsLWRhdGEgdG8gZXhjbHVkZSBBL1QgYW5kIEMvRyBTTlBzLgoKTGFzdGx5LCByZW1vdmUgdGhlIHRlbXBvcmFyeSBmaWxlcy4KCmBgYApybSAtZnYgZHVtbXlfcHJvamVjdC8qLnRlbXAqCmBgYAoKRmluYWxseSwgd2UgY2FuIGNhbGN1bGF0ZSB0aGUgaGV0ZXJvenlnb3NpdHkgcmF0ZS4KCmBgYApwbGluayAtLWJmaWxlIGR1bW15X3Byb2plY3QvcmF3ZGF0YS5jbGVhbi51bHRyYWNsZWFuIC0taGV0IC0tb3V0IGR1bW15X3Byb2plY3QvcmF3ZGF0YS5jbGVhbi51bHRyYWNsZWFuCmBgYAoKVGhpcyBjcmVhdGVzIHRoZSBmaWxlIGBkdW1teV9wcm9qZWN0L3Jhd2RhdGEuY2xlYW4udWx0cmFjbGVhbi5oZXRgLCBpbiB3aGljaCB0aGUgdGhpcmQgY29sdW1uIGRlbm90ZXMgdGhlIG9ic2VydmVkIG51bWJlciBvZiBob21venlnb3VzIGdlbm90eXBlcywgTyhIb20pLCBhbmQgdGhlIGZpZnRoIGNvbHVtbiBkZW5vdGVzIHRoZSBudW1iZXIgb2Ygbm9ubWlzc2luZyBnZW5vdHlwZXMsIE4oTk0pLCBwZXIgaW5kaXZpZHVhbC4gV2UgY2FuIG5vdyBjYWxjdWxhdGUgdGhlIG9ic2VydmVkIGhldGVyb3p5Z29zaXR5IHJhdGUgcGVyIGluZGl2aWR1YWwgdXNpbmcgdGhlIGZvcm11bGEgKE4oTk0pIC0gTyhIb20pKS9OKE5NKS4KCk9mdGVuIHRoZXJlIGlzIGEgY29ycmVsYXRpb24gYmV0d2VlbiBoZXRlcm96eWdvc2l0eSByYXRlIGFuZCBtaXNzaW5nIGRhdGEuIFRodXMsIHdlIHNob3VsZCBwbG90IHRoZSBvYnNlcnZlZCBoZXRlcm96eWdvc2l0eSByYXRlIHBlciBpbmRpdmlkdWFsIG9uIHRoZSB4LWF4aXMgYW5kIHRoZSBwcm9wb3J0aW9uIG9mIG1pc3NpbmcgU05QLCB0aGF0IGlzIHRoZSAnU05QIGNhbGwgcmF0ZScsIHBlciBpbmRpdmlkdWFscyBvbiB0aGUgeS1heGlzIChGaWd1cmUgXEByZWYoZmlnOnNob3doZXRlcm96eWdvc2l0eSkpLgoKCgoKCgo8IS0tIEkgcHJlZmVyIHRvIHVzZSBnZ3B1YnIsIGJ1dCBJIGRvbid0IHVuZGVyc3RhbmQgd2h5IHRoaXMgY29kZSBkb2Vzbid0IHdvcmsgYW55bW9yZS4uLj8hPyEgLS0+CjwhLS0gYGBge3IgaGV0ZXJvenlnb3NpdHksIGV2YWwgPSBGQUxTRX0gLS0+CjwhLS0gZ2dwdWJyOjpnZ3NjYXR0ZXIocmF3X0lNSVNTSEVULCB4ID0gImxvZ0ZfTUlTUyIsIHkgPSAibWVhbkhldCIsIC0tPgo8IS0tICAgICAgICAgICAgICAgICAgIGNvbG9ycyA9IGNvbG9ycywgLS0+CjwhLS0gICAgICAgICAgICAgICAgICAgeGxhYiA9ICJQcm9wb3J0aW9uIG9mIG1pc3NpbmcgZ2Vub3R5cGVzIiwgeWxhYiA9ICJIZXRlcm96eWdvc2l0eSByYXRlIikgKyAtLT4KPCEtLSAgIHNjYWxlX3hfY29udGludW91cyhsYWJlbHM9YygiLTMiID0gIjAuMDAxIiwgIi0yIiA9ICIwLjAxIiwgLS0+CjwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0xIiA9ICIwLjEiLCAiMCIgPSAiMSIpKSArIC0tPgo8IS0tICAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gbG93ZXJfbWVhbkhldCwgbGluZXR5cGUgPSAiZGFzaGVkIiwgLS0+CjwhLS0gICAgICAgICAgICAgICAgIGNvbG9yID0gIiNFNTU3MzgiLCBzaXplID0gMSkgKyAtLT4KPCEtLSAgIGdlb21faGxpbmUoeWludGVyY2VwdCA9IHVwcGVyX21lYW5IZXQsIGxpbmV0eXBlID0gImRhc2hlZCIsIC0tPgo8IS0tICAgICAgICAgICAgICAgICBjb2xvciA9ICIjRTU1NzM4Iiwgc2l6ZSA9IDEpICsgLS0+CjwhLS0gICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSBwcm9wX21pc3MsIGxpbmV0eXBlID0gImRhc2hlZCIsIC0tPgo8IS0tICAgICAgICAgICAgICAgICBjb2xvciA9ICIjRTU1NzM4Iiwgc2l6ZSA9IDEpIC0tPgo8IS0tIGBgYCAtLT4KCjxkaXYgY2xhc3M9ImZpZ3VyZSIgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+CjxpbWcgc3JjPSJpbWcvX2d3YXNfZHVtbXkvc2hvdy1oZXRlcm96eWdvc2l0eS5wbmciIGFsdD0iSGV0ZXJvenlnb3NpdHkgYXMgYSBmdW5jdGlvbiBvZiBTTlAgY2FsbCByYXRlLiIgd2lkdGg9Ijg1JSIgLz4KPHAgY2xhc3M9ImNhcHRpb24iPihcI2ZpZzpzaG93aGV0ZXJvenlnb3NpdHkpSGV0ZXJvenlnb3NpdHkgYXMgYSBmdW5jdGlvbiBvZiBTTlAgY2FsbCByYXRlLjwvcD4KPC9kaXY+CgpFeGFtaW5lIHRoZSBwbG90IChGaWd1cmUgXEByZWYoZmlnOnNob3doZXRlcm96eWdvc2l0eSkpIHRvIGRlY2lkZSByZWFzb25hYmxlIHRocmVzaG9sZHMgYXQgd2hpY2ggdG8gZXhjbHVkZSBpbmRpdmlkdWFscyBiYXNlZCBvbiBlbGV2YXRlZCBtaXNzaW5nIG9yIGV4dHJlbWUgaGV0ZXJvenlnb3NpdHkuIFdlIGNob3NlIHRvIGV4Y2x1ZGUgYWxsIGluZGl2aWR1YWxzIHdpdGggYSBnZW5vdHlwZSBmYWlsdXJlIHJhdGUgPj0gMC4wMyAodmVydGljYWwgZGFzaGVkIGxpbmUpIGFuZC9vciBhIGhldGVyb3p5Z29zaXR5IHJhdGUgwrEgMyBzLmQuIGZyb20gdGhlIG1lYW4gKGhvcml6b250YWwgZGFzaGVkIGxpbmVzKS4gQWRkIHRoZSBGSUQgYW5kIElJRCBvZiB0aGUgc2FtcGxlcyBmYWlsaW5nIHRoaXMgUUMgdG8gdGhlIGZpbGUgbmFtZWQgYGZhaWwtaW1pc3NoZXQtcWMudHh0YC4KCj4gSG93IHdvdWxkIHlvdSBjcmVhdGUgdGhpcyBmaWxlPwoKCgpJZiBhbGwgaXMgcmlnaHQsIHlvdSdkIGhhdmUgc29tZXRoaW5nIGxpa2UgVGFibGUgXEByZWYodGFiOmZhaWxlZGNhbGxyYXRlaGV0KS4KCgoKCmBgYHs9aHRtbH0KPGRpdiBjbGFzcz0idGFid2lkIj48c3R5bGU+LmNsLWUwZWVlYTBle30uY2wtZTBlNzcwZDB7Zm9udC1mYW1pbHk6J0hlbHZldGljYSc7Zm9udC1zaXplOjExcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3R5bGU6bm9ybWFsO3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOnJnYmEoMCwgMCwgMCwgMS4wMCk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt9LmNsLWUwZTk1NTYye21hcmdpbjowO3RleHQtYWxpZ246cmlnaHQ7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO3BhZGRpbmctYm90dG9tOjVwdDtwYWRkaW5nLXRvcDo1cHQ7cGFkZGluZy1sZWZ0OjVwdDtwYWRkaW5nLXJpZ2h0OjVwdDtsaW5lLWhlaWdodDogMTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O30uY2wtZTBlOTYzMzZ7d2lkdGg6MC41NjhpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMS41cHQgc29saWQgcmdiYSgxMDIsIDEwMiwgMTAyLCAxLjAwKTtib3JkZXItdG9wOiAxLjVwdCBzb2xpZCByZ2JhKDEwMiwgMTAyLCAxMDIsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTBlOTYzMzd7d2lkdGg6MC41NjhpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUwZTk2MzU0e3dpZHRoOjAuNTY4aW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMGU5NjM1ZXt3aWR0aDowLjU2OGluO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTBlOTYzNWZ7d2lkdGg6MC41NjhpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUwZTk2MzYwe3dpZHRoOjAuNTY4aW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMGU5NjM2OHt3aWR0aDowLjU2OGluO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTBlOTYzNjl7d2lkdGg6MC41NjhpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUwZTk2MzZhe3dpZHRoOjAuNTY4aW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMGU5NjM3Mnt3aWR0aDowLjU2OGluO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTBlOTYzNzN7d2lkdGg6MC41NjhpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUwZTk2Mzdje3dpZHRoOjAuNTY4aW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMGU5NjM3ZHt3aWR0aDowLjU2OGluO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTBlOTYzODZ7d2lkdGg6MC41NjhpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUwZTk2Mzg3e3dpZHRoOjAuNTY4aW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMGU5NjM5MHt3aWR0aDowLjU2OGluO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAxLjVwdCBzb2xpZCByZ2JhKDEwMiwgMTAyLCAxMDIsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9PC9zdHlsZT48dGFibGUgZGF0YS1xdWFydG8tZGlzYWJsZS1wcm9jZXNzaW5nPSd0cnVlJyBjbGFzcz0nY2wtZTBlZWVhMGUnPgoKYGBgCgo8Y2FwdGlvbiBzdHlsZT0iZGlzcGxheTp0YWJsZS1jYXB0aW9uOyI+KFwjdGFiOmZhaWxlZGNhbGxyYXRlaGV0KTxzcGFuPkZhaWxlZCBzYW1wbGVzIGR1ZSB0byBzYW1wbGUgY2FsbCByYXRlcyBhbmQgaGV0ZXJvenlnb3NpdHkgcmF0ZS48L3NwYW4+PC9jYXB0aW9uPgoKYGBgez1odG1sfQoKPHRoZWFkPjx0ciBzdHlsZT0ib3ZlcmZsb3ctd3JhcDpicmVhay13b3JkOyI+PHRoIGNsYXNzPSJjbC1lMGU5NjMzNiI+PHAgY2xhc3M9ImNsLWUwZTk1NTYyIj48c3BhbiBjbGFzcz0iY2wtZTBlNzcwZDAiPkZJRDwvc3Bhbj48L3A+PC90aD48dGggY2xhc3M9ImNsLWUwZTk2MzM2Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+SUlEPC9zcGFuPjwvcD48L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyIHN0eWxlPSJvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7Ij48dGQgY2xhc3M9ImNsLWUwZTk2MzM3Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+Mjg8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMGU5NjMzNyI+PHAgY2xhc3M9ImNsLWUwZTk1NTYyIj48c3BhbiBjbGFzcz0iY2wtZTBlNzcwZDAiPjI4PC9zcGFuPjwvcD48L3RkPjwvdHI+PHRyIHN0eWxlPSJvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7Ij48dGQgY2xhc3M9ImNsLWUwZTk2MzU0Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+NTA8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMGU5NjM1NCI+PHAgY2xhc3M9ImNsLWUwZTk1NTYyIj48c3BhbiBjbGFzcz0iY2wtZTBlNzcwZDAiPjUwPC9zcGFuPjwvcD48L3RkPjwvdHI+PHRyIHN0eWxlPSJvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7Ij48dGQgY2xhc3M9ImNsLWUwZTk2MzVlIj48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+NTI8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMGU5NjM1ZSI+PHAgY2xhc3M9ImNsLWUwZTk1NTYyIj48c3BhbiBjbGFzcz0iY2wtZTBlNzcwZDAiPjUyPC9zcGFuPjwvcD48L3RkPjwvdHI+PHRyIHN0eWxlPSJvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7Ij48dGQgY2xhc3M9ImNsLWUwZTk2MzVlIj48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+NTM8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMGU5NjM1ZSI+PHAgY2xhc3M9ImNsLWUwZTk1NTYyIj48c3BhbiBjbGFzcz0iY2wtZTBlNzcwZDAiPjUzPC9zcGFuPjwvcD48L3RkPjwvdHI+PHRyIHN0eWxlPSJvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7Ij48dGQgY2xhc3M9ImNsLWUwZTk2MzVmIj48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+Njc8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMGU5NjM1ZiI+PHAgY2xhc3M9ImNsLWUwZTk1NTYyIj48c3BhbiBjbGFzcz0iY2wtZTBlNzcwZDAiPjY3PC9zcGFuPjwvcD48L3RkPjwvdHI+PHRyIHN0eWxlPSJvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7Ij48dGQgY2xhc3M9ImNsLWUwZTk2MzM3Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+OTY8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMGU5NjMzNyI+PHAgY2xhc3M9ImNsLWUwZTk1NTYyIj48c3BhbiBjbGFzcz0iY2wtZTBlNzcwZDAiPjk2PC9zcGFuPjwvcD48L3RkPjwvdHI+PHRyIHN0eWxlPSJvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7Ij48dGQgY2xhc3M9ImNsLWUwZTk2MzYwIj48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MjA1PC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTBlOTYzNjAiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4yMDU8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzMzciPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4yOTg8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMGU5NjMzNyI+PHAgY2xhc3M9ImNsLWUwZTk1NTYyIj48c3BhbiBjbGFzcz0iY2wtZTBlNzcwZDAiPjI5ODwvc3Bhbj48L3A+PC90ZD48L3RyPjx0ciBzdHlsZT0ib3ZlcmZsb3ctd3JhcDpicmVhay13b3JkOyI+PHRkIGNsYXNzPSJjbC1lMGU5NjM1ZSI+PHAgY2xhc3M9ImNsLWUwZTk1NTYyIj48c3BhbiBjbGFzcz0iY2wtZTBlNzcwZDAiPjMxMDwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2MzVlIj48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MzEwPC9zcGFuPjwvcD48L3RkPjwvdHI+PHRyIHN0eWxlPSJvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7Ij48dGQgY2xhc3M9ImNsLWUwZTk2MzVlIj48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MzUxPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTBlOTYzNWUiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4zNTE8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzNWYiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj40MDQ8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMGU5NjM1ZiI+PHAgY2xhc3M9ImNsLWUwZTk1NTYyIj48c3BhbiBjbGFzcz0iY2wtZTBlNzcwZDAiPjQwNDwvc3Bhbj48L3A+PC90ZD48L3RyPjx0ciBzdHlsZT0ib3ZlcmZsb3ctd3JhcDpicmVhay13b3JkOyI+PHRkIGNsYXNzPSJjbC1lMGU5NjM2OCI+PHAgY2xhc3M9ImNsLWUwZTk1NTYyIj48c3BhbiBjbGFzcz0iY2wtZTBlNzcwZDAiPjQxODwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2MzY4Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+NDE4PC9zcGFuPjwvcD48L3RkPjwvdHI+PHRyIHN0eWxlPSJvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7Ij48dGQgY2xhc3M9ImNsLWUwZTk2MzYwIj48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+NDIzPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTBlOTYzNjAiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj40MjM8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzMzciPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj40Mjg8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMGU5NjMzNyI+PHAgY2xhc3M9ImNsLWUwZTk1NTYyIj48c3BhbiBjbGFzcz0iY2wtZTBlNzcwZDAiPjQyODwvc3Bhbj48L3A+PC90ZD48L3RyPjx0ciBzdHlsZT0ib3ZlcmZsb3ctd3JhcDpicmVhay13b3JkOyI+PHRkIGNsYXNzPSJjbC1lMGU5NjM2OSI+PHAgY2xhc3M9ImNsLWUwZTk1NTYyIj48c3BhbiBjbGFzcz0iY2wtZTBlNzcwZDAiPjQ0Mjwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2MzY5Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+NDQyPC9zcGFuPjwvcD48L3RkPjwvdHI+PHRyIHN0eWxlPSJvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7Ij48dGQgY2xhc3M9ImNsLWUwZTk2MzZhIj48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+NDQ0PC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTBlOTYzNmEiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj40NDQ8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzNjgiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj41NDg8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMGU5NjM2OCI+PHAgY2xhc3M9ImNsLWUwZTk1NTYyIj48c3BhbiBjbGFzcz0iY2wtZTBlNzcwZDAiPjU0ODwvc3Bhbj48L3A+PC90ZD48L3RyPjx0ciBzdHlsZT0ib3ZlcmZsb3ctd3JhcDpicmVhay13b3JkOyI+PHRkIGNsYXNzPSJjbC1lMGU5NjM2OSI+PHAgY2xhc3M9ImNsLWUwZTk1NTYyIj48c3BhbiBjbGFzcz0iY2wtZTBlNzcwZDAiPjc3Mjwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2MzY5Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+NzcyPC9zcGFuPjwvcD48L3RkPjwvdHI+PHRyIHN0eWxlPSJvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7Ij48dGQgY2xhc3M9ImNsLWUwZTk2MzY4Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+ODM1PC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTBlOTYzNjgiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj44MzU8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzNjgiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj44NTA8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMGU5NjM2OCI+PHAgY2xhc3M9ImNsLWUwZTk1NTYyIj48c3BhbiBjbGFzcz0iY2wtZTBlNzcwZDAiPjg1MDwvc3Bhbj48L3A+PC90ZD48L3RyPjx0ciBzdHlsZT0ib3ZlcmZsb3ctd3JhcDpicmVhay13b3JkOyI+PHRkIGNsYXNzPSJjbC1lMGU5NjM2OCI+PHAgY2xhc3M9ImNsLWUwZTk1NTYyIj48c3BhbiBjbGFzcz0iY2wtZTBlNzcwZDAiPjg1Mzwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2MzY4Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+ODUzPC9zcGFuPjwvcD48L3RkPjwvdHI+PHRyIHN0eWxlPSJvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7Ij48dGQgY2xhc3M9ImNsLWUwZTk2MzcyIj48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+OTEwPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTBlOTYzNzIiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj45MTA8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzNzIiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj45Mzk8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMGU5NjM3MiI+PHAgY2xhc3M9ImNsLWUwZTk1NTYyIj48c3BhbiBjbGFzcz0iY2wtZTBlNzcwZDAiPjkzOTwvc3Bhbj48L3A+PC90ZD48L3RyPjx0ciBzdHlsZT0ib3ZlcmZsb3ctd3JhcDpicmVhay13b3JkOyI+PHRkIGNsYXNzPSJjbC1lMGU5NjMzNyI+PHAgY2xhc3M9ImNsLWUwZTk1NTYyIj48c3BhbiBjbGFzcz0iY2wtZTBlNzcwZDAiPjk2Njwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2MzM3Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+OTY2PC9zcGFuPjwvcD48L3RkPjwvdHI+PHRyIHN0eWxlPSJvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7Ij48dGQgY2xhc3M9ImNsLWUwZTk2MzczIj48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+OTY4PC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTBlOTYzNzMiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj45Njg8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzN2MiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDAwMzwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2MzdjIj48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSwwMDM8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzN2QiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDAwNjwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2MzdkIj48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSwwMDY8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzODYiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDA0NTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2Mzg2Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSwwNDU8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzODYiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDA1ODwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2Mzg2Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSwwNTg8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzODYiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDE1NDwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2Mzg2Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSwxNTQ8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzN2QiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDIzNjwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2MzdkIj48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSwyMzY8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzODciPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDI5NDwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2Mzg3Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSwyOTQ8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzN2MiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDM5NTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2MzdjIj48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSwzOTU8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzN2MiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDUzNzwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2MzdjIj48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSw1Mzc8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzODYiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDU1NDwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2Mzg2Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSw1NTQ8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzODYiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDU4Nzwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2Mzg2Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSw1ODc8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzN2QiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDY5NDwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2MzdkIj48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSw2OTQ8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzODYiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDc4OTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2Mzg2Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSw3ODk8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzODciPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDgzMjwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2Mzg3Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSw4MzI8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzN2QiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDg2Njwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2MzdkIj48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSw4NjY8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzODYiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDkwNDwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2Mzg2Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSw5MDQ8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzODciPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDkyMDwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2Mzg3Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSw5MjA8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzN2MiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDk1MTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2MzdjIj48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSw5NTE8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzODciPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDk1Mjwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2Mzg3Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSw5NTI8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzN2MiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDk1Mzwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2MzdjIj48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSw5NTM8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzODYiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDk1NDwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2Mzg2Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSw5NTQ8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzN2MiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDk1NTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2MzdjIj48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSw5NTU8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzODYiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDk4MTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2Mzg2Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSw5ODE8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzODYiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDk4NDwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2Mzg2Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSw5ODQ8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzODYiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDk4NTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2Mzg2Ij48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSw5ODU8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTBlOTYzOTAiPjxwIGNsYXNzPSJjbC1lMGU5NTU2MiI+PHNwYW4gY2xhc3M9ImNsLWUwZTc3MGQwIj4xLDk4Njwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUwZTk2MzkwIj48cCBjbGFzcz0iY2wtZTBlOTU1NjIiPjxzcGFuIGNsYXNzPSJjbC1lMGU3NzBkMCI+MSw5ODY8L3NwYW4+PC9wPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+CmBgYAoKCiMjIFJlbGF0ZWRuZXNzCjwhLS0gaHR0cHM6Ly9ycHVicy5jb20vRUFWV2luZy9zeW1ib2xzIC0tPgpXZSBjYWxjdWxhdGUgSWRlbnRpdHktYnktRGVzY2VudCAoSUJTKSB0byBpZGVudGlmeSBkdXBsaWNhdGVkIGFuZCByZWxhdGVkIHNhbXBsZXMuIEluIFRhYmxlIFxAcmVmKHRhYjpzaG93cmVsYXRlZG5lc3MpIHdlIHNob3cgaG93IG11Y2ggRE5BIGlzIHNoYXJlZCBiZXR3ZWVuIGluZGl2aWR1YWxzIGRlcGVuZGluZyBvbiB0aGVpciByZWxhdGlvbltAc3RhcGxlczIwMTRdLiBJQlMgaXMgbWVhc3VyZWQgYnkgY2FsY3VsYXRpbmcgcGktaGF0ICgkXHdpZGVoYXR7XHBpfSQpLCB3aGljaCBpcyBpbiBlc3NlbmNlIHRoZSBwcm9wb3J0aW9uIG9mIHRoZSBETkEgdGhhdCBhIHBhaXIgb2Ygc2FtcGxlcyBzaGFyZS4gVG8gY2FsY3VsYXRlIHRoaXMsIHdlIG5lZWRlZCB0aGlzIHVsdHJhY2xlYW4gZGF0YXNldCwgd2l0aG91dCBsb3ctcXVhbGl0eSBTTlBzIGFuZCB3aXRob3V0IGhpZ2gtTEQgcmVnaW9ucy4gCgoKCgoKYGBgez1odG1sfQo8ZGl2IGNsYXNzPSJ0YWJ3aWQiPjxzdHlsZT4uY2wtZTExNjQwNTR7fS5jbC1lMTEwNjcxMHtmb250LWZhbWlseTonSGVsdmV0aWNhJztmb250LXNpemU6MTFwdDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHlsZTpub3JtYWw7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6cmdiYSgwLCAwLCAwLCAxLjAwKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O30uY2wtZTExMjliOGV7bWFyZ2luOjA7dGV4dC1hbGlnbjpsZWZ0O2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtwYWRkaW5nLWJvdHRvbTo1cHQ7cGFkZGluZy10b3A6NXB0O3BhZGRpbmctbGVmdDo1cHQ7cGFkZGluZy1yaWdodDo1cHQ7bGluZS1oZWlnaHQ6IDE7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt9LmNsLWUxMTI5Yjhme21hcmdpbjowO3RleHQtYWxpZ246cmlnaHQ7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO3BhZGRpbmctYm90dG9tOjVwdDtwYWRkaW5nLXRvcDo1cHQ7cGFkZGluZy1sZWZ0OjVwdDtwYWRkaW5nLXJpZ2h0OjVwdDtsaW5lLWhlaWdodDogMTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O30uY2wtZTExMmFjM2N7d2lkdGg6NC4xMDlpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMS41cHQgc29saWQgcmdiYSgxMDIsIDEwMiwgMTAyLCAxLjAwKTtib3JkZXItdG9wOiAxLjVwdCBzb2xpZCByZ2JhKDEwMiwgMTAyLCAxMDIsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTExMmFjM2R7d2lkdGg6MS4yM2luO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAxLjVwdCBzb2xpZCByZ2JhKDEwMiwgMTAyLCAxMDIsIDEuMDApO2JvcmRlci10b3A6IDEuNXB0IHNvbGlkIHJnYmEoMTAyLCAxMDIsIDEwMiwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMTEyYWM0Nnt3aWR0aDowLjczN2luO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAxLjVwdCBzb2xpZCByZ2JhKDEwMiwgMTAyLCAxMDIsIDEuMDApO2JvcmRlci10b3A6IDEuNXB0IHNvbGlkIHJnYmEoMTAyLCAxMDIsIDEwMiwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMTEyYWM0N3t3aWR0aDowLjgwNWluO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAxLjVwdCBzb2xpZCByZ2JhKDEwMiwgMTAyLCAxMDIsIDEuMDApO2JvcmRlci10b3A6IDEuNXB0IHNvbGlkIHJnYmEoMTAyLCAxMDIsIDEwMiwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMTEyYWM1MHt3aWR0aDowLjUyNWluO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAxLjVwdCBzb2xpZCByZ2JhKDEwMiwgMTAyLCAxMDIsIDEuMDApO2JvcmRlci10b3A6IDEuNXB0IHNvbGlkIHJnYmEoMTAyLCAxMDIsIDEwMiwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMTEyYWM1MXt3aWR0aDo0LjEwOWluO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTExMmFjNWF7d2lkdGg6MS4yM2luO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTExMmFjNWJ7d2lkdGg6MC43MzdpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUxMTJhYzY0e3dpZHRoOjAuODA1aW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMTEyYWM2NXt3aWR0aDowLjUyNWluO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTExMmFjNmV7d2lkdGg6NC4xMDlpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUxMTJhYzZme3dpZHRoOjEuMjNpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUxMTJhYzc4e3dpZHRoOjAuNzM3aW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMTEyYWM3OXt3aWR0aDowLjgwNWluO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTExMmFjODJ7d2lkdGg6MC41MjVpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUxMTJhYzgze3dpZHRoOjQuMTA5aW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMTEyYWM4Y3t3aWR0aDoxLjIzaW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMTEyYWM4ZHt3aWR0aDowLjczN2luO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTExMmFjOTZ7d2lkdGg6MC44MDVpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUxMTJhYzk3e3dpZHRoOjAuNTI1aW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMTEyYWM5OHt3aWR0aDo0LjEwOWluO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTExMmFjYTB7d2lkdGg6MS4yM2luO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTExMmFjYTF7d2lkdGg6MC43MzdpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUxMTJhY2Fhe3dpZHRoOjAuODA1aW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMTEyYWNhYnt3aWR0aDowLjUyNWluO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTExMmFjYjR7d2lkdGg6NC4xMDlpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUxMTJhY2I1e3dpZHRoOjEuMjNpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUxMTJhY2I2e3dpZHRoOjAuNzM3aW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMTEyYWNiZXt3aWR0aDowLjgwNWluO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTExMmFjYmZ7d2lkdGg6MC41MjVpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUxMTJhY2Mwe3dpZHRoOjQuMTA5aW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMTEyYWNjOHt3aWR0aDoxLjIzaW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMTEyYWNkMnt3aWR0aDowLjczN2luO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTExMmFjZDN7d2lkdGg6MC44MDVpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUxMTJhY2Q0e3dpZHRoOjAuNTI1aW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMTEyYWNkY3t3aWR0aDo0LjEwOWluO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTExMmFjZGR7d2lkdGg6MS4yM2luO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTExMmFjZTZ7d2lkdGg6MC43MzdpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUxMTJhY2U3e3dpZHRoOjAuODA1aW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMTEyYWNlOHt3aWR0aDowLjUyNWluO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTExMmFjZjB7d2lkdGg6NC4xMDlpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUxMTJhY2Yxe3dpZHRoOjEuMjNpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUxMTJhY2Zhe3dpZHRoOjAuNzM3aW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMTEyYWNmYnt3aWR0aDowLjgwNWluO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTExMmFjZmN7d2lkdGg6MC41MjVpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUxMTJhZDA0e3dpZHRoOjQuMTA5aW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMTEyYWQwNXt3aWR0aDoxLjIzaW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMTEyYWQwZXt3aWR0aDowLjczN2luO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTExMmFkMGZ7d2lkdGg6MC44MDVpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUxMTJhZDE4e3dpZHRoOjAuNTI1aW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMTEyYWQxOXt3aWR0aDo0LjEwOWluO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAxLjVwdCBzb2xpZCByZ2JhKDEwMiwgMTAyLCAxMDIsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUxMTJhZDIye3dpZHRoOjEuMjNpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMS41cHQgc29saWQgcmdiYSgxMDIsIDEwMiwgMTAyLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMTEyYWQyM3t3aWR0aDowLjczN2luO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAxLjVwdCBzb2xpZCByZ2JhKDEwMiwgMTAyLCAxMDIsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUxMTJhZDJje3dpZHRoOjAuODA1aW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDEuNXB0IHNvbGlkIHJnYmEoMTAyLCAxMDIsIDEwMiwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTExMmFkMmR7d2lkdGg6MC41MjVpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMS41cHQgc29saWQgcmdiYSgxMDIsIDEwMiwgMTAyLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fTwvc3R5bGU+PHRhYmxlIGRhdGEtcXVhcnRvLWRpc2FibGUtcHJvY2Vzc2luZz0ndHJ1ZScgY2xhc3M9J2NsLWUxMTY0MDU0Jz4KCmBgYAoKPGNhcHRpb24gc3R5bGU9ImRpc3BsYXk6dGFibGUtY2FwdGlvbjsiPihcI3RhYjpzaG93cmVsYXRlZG5lc3MpPHNwYW4+RmFtaWxpYWwgcmVsYXRpb25zIGFuZCAlIEROQSBzaGFyZWQuPC9zcGFuPjwvY2FwdGlvbj4KCmBgYHs9aHRtbH0KCjx0aGVhZD48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0aCBjbGFzcz0iY2wtZTExMmFjM2MiPjxwIGNsYXNzPSJjbC1lMTEyOWI4ZSI+PHNwYW4gY2xhc3M9ImNsLWUxMTA2NzEwIj5SZWxhdGVkbmVzczwvc3Bhbj48L3A+PC90aD48dGggY2xhc3M9ImNsLWUxMTJhYzNkIj48cCBjbGFzcz0iY2wtZTExMjliOGUiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+JS5ETkEuc2hhcmluZzwvc3Bhbj48L3A+PC90aD48dGggY2xhc3M9ImNsLWUxMTJhYzQ2Ij48cCBjbGFzcz0iY2wtZTExMjliOGUiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+SUJEMDwvc3Bhbj48L3A+PC90aD48dGggY2xhc3M9ImNsLWUxMTJhYzQ3Ij48cCBjbGFzcz0iY2wtZTExMjliOGUiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+SUJEMTwvc3Bhbj48L3A+PC90aD48dGggY2xhc3M9ImNsLWUxMTJhYzUwIj48cCBjbGFzcz0iY2wtZTExMjliOGYiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+SUJEMjwvc3Bhbj48L3A+PC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pjx0ciBzdHlsZT0ib3ZlcmZsb3ctd3JhcDpicmVhay13b3JkOyI+PHRkIGNsYXNzPSJjbC1lMTEyYWM1MSI+PHAgY2xhc3M9ImNsLWUxMTI5YjhlIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPk1vbm96eWdvdGljIHR3aW5zICAgICAgICAgIDwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMTJhYzVhIj48cCBjbGFzcz0iY2wtZTExMjliOGUiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+IMKxMTAwJTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMTJhYzViIj48cCBjbGFzcz0iY2wtZTExMjliOGUiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+MDwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMTJhYzY0Ij48cCBjbGFzcz0iY2wtZTExMjliOGUiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+MTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMTJhYzY1Ij48cCBjbGFzcz0iY2wtZTExMjliOGYiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+MC4wMDwvc3Bhbj48L3A+PC90ZD48L3RyPjx0ciBzdHlsZT0ib3ZlcmZsb3ctd3JhcDpicmVhay13b3JkOyI+PHRkIGNsYXNzPSJjbC1lMTEyYWM2ZSI+PHAgY2xhc3M9ImNsLWUxMTI5YjhlIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPlBhcmVudHMvY2hpbGQgICAgICAgICAgICAgIDwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMTJhYzZmIj48cCBjbGFzcz0iY2wtZTExMjliOGUiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+IMKxNTAlPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTExMmFjNzgiPjxwIGNsYXNzPSJjbC1lMTEyOWI4ZSI+PHNwYW4gY2xhc3M9ImNsLWUxMTA2NzEwIj4wLjI1PC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTExMmFjNzkiPjxwIGNsYXNzPSJjbC1lMTEyOWI4ZSI+PHNwYW4gY2xhc3M9ImNsLWUxMTA2NzEwIj4wLjU8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMTEyYWM4MiI+PHAgY2xhc3M9ImNsLWUxMTI5YjhmIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPjAuMjU8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTExMmFjODMiPjxwIGNsYXNzPSJjbC1lMTEyOWI4ZSI+PHNwYW4gY2xhc3M9ImNsLWUxMTA2NzEwIj5TaWJsaW5nICAgICAgICAgICAgICAgICAgICA8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMTEyYWM4YyI+PHAgY2xhc3M9ImNsLWUxMTI5YjhlIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPiDCsTUwJTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMTJhYzhkIj48cCBjbGFzcz0iY2wtZTExMjliOGUiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+MC4yNTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMTJhYzk2Ij48cCBjbGFzcz0iY2wtZTExMjliOGUiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+MC41PC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTExMmFjOTciPjxwIGNsYXNzPSJjbC1lMTEyOWI4ZiI+PHNwYW4gY2xhc3M9ImNsLWUxMTA2NzEwIj4wLjI1PC9zcGFuPjwvcD48L3RkPjwvdHI+PHRyIHN0eWxlPSJvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7Ij48dGQgY2xhc3M9ImNsLWUxMTJhYzk4Ij48cCBjbGFzcz0iY2wtZTExMjliOGUiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+RnJhdGVybmFsIHR3aW5zICAgICAgICAgICAgPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTExMmFjYTAiPjxwIGNsYXNzPSJjbC1lMTEyOWI4ZSI+PHNwYW4gY2xhc3M9ImNsLWUxMTA2NzEwIj4gwrE1MCU8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMTEyYWNhMSI+PHAgY2xhc3M9ImNsLWUxMTI5YjhlIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPjAuMjU8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMTEyYWNhYSI+PHAgY2xhc3M9ImNsLWUxMTI5YjhlIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPjAuNTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMTJhY2FiIj48cCBjbGFzcz0iY2wtZTExMjliOGYiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+MC4yNTwvc3Bhbj48L3A+PC90ZD48L3RyPjx0ciBzdHlsZT0ib3ZlcmZsb3ctd3JhcDpicmVhay13b3JkOyI+PHRkIGNsYXNzPSJjbC1lMTEyYWM4MyI+PHAgY2xhc3M9ImNsLWUxMTI5YjhlIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPkdyYW5kcGFyZW50L2dyYW5kY2hpbGQgICAgIDwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMTJhYzhjIj48cCBjbGFzcz0iY2wtZTExMjliOGUiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+IMKxMjUlPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTExMmFjOGQiPjxwIGNsYXNzPSJjbC1lMTEyOWI4ZSI+PHNwYW4gY2xhc3M9ImNsLWUxMTA2NzEwIj4wLjU8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMTEyYWM5NiI+PHAgY2xhc3M9ImNsLWUxMTI5YjhlIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPjAuNTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMTJhYzk3Ij48cCBjbGFzcz0iY2wtZTExMjliOGYiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+MC4wMDwvc3Bhbj48L3A+PC90ZD48L3RyPjx0ciBzdHlsZT0ib3ZlcmZsb3ctd3JhcDpicmVhay13b3JkOyI+PHRkIGNsYXNzPSJjbC1lMTEyYWNiNCI+PHAgY2xhc3M9ImNsLWUxMTI5YjhlIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPkF1bnQvVW5jbGUvTmllY2UvTmVwaGV3ICAgIDwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMTJhY2I1Ij48cCBjbGFzcz0iY2wtZTExMjliOGUiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+IMKxMjUlPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTExMmFjYjYiPjxwIGNsYXNzPSJjbC1lMTEyOWI4ZSI+PHNwYW4gY2xhc3M9ImNsLWUxMTA2NzEwIj4wLjU8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMTEyYWNiZSI+PHAgY2xhc3M9ImNsLWUxMTI5YjhlIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPjAuNTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMTJhY2JmIj48cCBjbGFzcz0iY2wtZTExMjliOGYiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+MC4wMDwvc3Bhbj48L3A+PC90ZD48L3RyPjx0ciBzdHlsZT0ib3ZlcmZsb3ctd3JhcDpicmVhay13b3JkOyI+PHRkIGNsYXNzPSJjbC1lMTEyYWNjMCI+PHAgY2xhc3M9ImNsLWUxMTI5YjhlIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPkhhbGYtc2libGluZyAgICAgICAgICAgICAgIDwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMTJhY2M4Ij48cCBjbGFzcz0iY2wtZTExMjliOGUiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+IMKxMjUlPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTExMmFjZDIiPjxwIGNsYXNzPSJjbC1lMTEyOWI4ZSI+PHNwYW4gY2xhc3M9ImNsLWUxMTA2NzEwIj4wLjU8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMTEyYWNkMyI+PHAgY2xhc3M9ImNsLWUxMTI5YjhlIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPjAuNTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMTJhY2Q0Ij48cCBjbGFzcz0iY2wtZTExMjliOGYiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+MC4wMDwvc3Bhbj48L3A+PC90ZD48L3RyPjx0ciBzdHlsZT0ib3ZlcmZsb3ctd3JhcDpicmVhay13b3JkOyI+PHRkIGNsYXNzPSJjbC1lMTEyYWM5OCI+PHAgY2xhc3M9ImNsLWUxMTI5YjhlIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPkZpcnN0LWNvdXNpbiAgICAgICAgICAgICAgIDwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMTJhY2EwIj48cCBjbGFzcz0iY2wtZTExMjliOGUiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+IMKxMTIuNSU8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMTEyYWNhMSI+PHAgY2xhc3M9ImNsLWUxMTI5YjhlIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPjAuNzU8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMTEyYWNhYSI+PHAgY2xhc3M9ImNsLWUxMTI5YjhlIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPjAuMjU8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMTEyYWNhYiI+PHAgY2xhc3M9ImNsLWUxMTI5YjhmIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPjAuMDA8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTExMmFjZGMiPjxwIGNsYXNzPSJjbC1lMTEyOWI4ZSI+PHNwYW4gY2xhc3M9ImNsLWUxMTA2NzEwIj5IYWxmIGZpcnN0LWNvdXNpbiAgICAgICAgICA8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMTEyYWNkZCI+PHAgY2xhc3M9ImNsLWUxMTI5YjhlIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPiDCsTYuMjUlPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTExMmFjZTYiPjxwIGNsYXNzPSJjbC1lMTEyOWI4ZSI+PHNwYW4gY2xhc3M9ImNsLWUxMTA2NzEwIj4wLjg3NTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMTJhY2U3Ij48cCBjbGFzcz0iY2wtZTExMjliOGUiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+MC4xMjU8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMTEyYWNlOCI+PHAgY2xhc3M9ImNsLWUxMTI5YjhmIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPjAuMDA8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTExMmFjNmUiPjxwIGNsYXNzPSJjbC1lMTEyOWI4ZSI+PHNwYW4gY2xhc3M9ImNsLWUxMTA2NzEwIj5GaXJzdC1jb3VzaW4gb25jZSByZW1vdmVkICA8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMTEyYWM2ZiI+PHAgY2xhc3M9ImNsLWUxMTI5YjhlIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPiDCsTYuMjUlPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTExMmFjNzgiPjxwIGNsYXNzPSJjbC1lMTEyOWI4ZSI+PHNwYW4gY2xhc3M9ImNsLWUxMTA2NzEwIj4wLjg3NTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMTJhYzc5Ij48cCBjbGFzcz0iY2wtZTExMjliOGUiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+MC4xMjU8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMTEyYWM4MiI+PHAgY2xhc3M9ImNsLWUxMTI5YjhmIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPjAuMDA8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTExMmFjZjAiPjxwIGNsYXNzPSJjbC1lMTEyOWI4ZSI+PHNwYW4gY2xhc3M9ImNsLWUxMTA2NzEwIj5TZWNvbmQtY291c2luICAgICAgICAgICAgICA8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMTEyYWNmMSI+PHAgY2xhc3M9ImNsLWUxMTI5YjhlIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPiDCsTMuMTMlPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTExMmFjZmEiPjxwIGNsYXNzPSJjbC1lMTEyOWI4ZSI+PHNwYW4gY2xhc3M9ImNsLWUxMTA2NzEwIj4wLjkzNzU8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMTEyYWNmYiI+PHAgY2xhc3M9ImNsLWUxMTI5YjhlIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPjYuMjVFLTI8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMTEyYWNmYyI+PHAgY2xhc3M9ImNsLWUxMTI5YjhmIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPjAuMDA8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTExMmFjZjAiPjxwIGNsYXNzPSJjbC1lMTEyOWI4ZSI+PHNwYW4gY2xhc3M9ImNsLWUxMTA2NzEwIj5TZWNvbmQtY291c2luIG9uY2UgcmVtb3ZlZCA8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMTEyYWNmMSI+PHAgY2xhc3M9ImNsLWUxMTI5YjhlIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPiDCsTEuNTYlPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTExMmFjZmEiPjxwIGNsYXNzPSJjbC1lMTEyOWI4ZSI+PHNwYW4gY2xhc3M9ImNsLWUxMTA2NzEwIj4wLjk2ODc1PC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTExMmFjZmIiPjxwIGNsYXNzPSJjbC1lMTEyOWI4ZSI+PHNwYW4gY2xhc3M9ImNsLWUxMTA2NzEwIj4zLjEyNUUtMjwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMTJhY2ZjIj48cCBjbGFzcz0iY2wtZTExMjliOGYiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+MC4wMDwvc3Bhbj48L3A+PC90ZD48L3RyPjx0ciBzdHlsZT0ib3ZlcmZsb3ctd3JhcDpicmVhay13b3JkOyI+PHRkIGNsYXNzPSJjbC1lMTEyYWQwNCI+PHAgY2xhc3M9ImNsLWUxMTI5YjhlIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPkRpc3RhbnRseSByZWxhdGVkPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTExMmFkMDUiPjxwIGNsYXNzPSJjbC1lMTEyOWI4ZSI+PHNwYW4gY2xhc3M9ImNsLWUxMTA2NzEwIj4mbHQ7MS41NiU8L3NwYW4+PC9wPjwvdGQ+PHRkIGNsYXNzPSJjbC1lMTEyYWQwZSI+PHAgY2xhc3M9ImNsLWUxMTI5YjhlIj48c3BhbiBjbGFzcz0iY2wtZTExMDY3MTAiPnZhcmllczwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMTJhZDBmIj48cCBjbGFzcz0iY2wtZTExMjliOGUiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+dmFyaWVzPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTExMmFkMTgiPjxwIGNsYXNzPSJjbC1lMTEyOWI4ZiI+PHNwYW4gY2xhc3M9ImNsLWUxMTA2NzEwIj4wLjAwPC9zcGFuPjwvcD48L3RkPjwvdHI+PHRyIHN0eWxlPSJvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7Ij48dGQgY2xhc3M9ImNsLWUxMTJhZDE5Ij48cCBjbGFzcz0iY2wtZTExMjliOGUiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+VW5yZWxhdGVkIChpbmNsdWRlcyByZWxhdGlvbnNoaXBzIGJleW9uZCB0aGUgdGhpcmQgZGVncmVlKTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMTJhZDIyIj48cCBjbGFzcz0iY2wtZTExMjliOGUiPjxzcGFuIGNsYXNzPSJjbC1lMTEwNjcxMCI+Jmx0OzEuNTYlPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTExMmFkMjMiPjxwIGNsYXNzPSJjbC1lMTEyOWI4ZSI+PHNwYW4gY2xhc3M9ImNsLWUxMTA2NzEwIj4xPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTExMmFkMmMiPjxwIGNsYXNzPSJjbC1lMTEyOWI4ZSI+PHNwYW4gY2xhc3M9ImNsLWUxMTA2NzEwIj4wPC9zcGFuPjwvcD48L3RkPjx0ZCBjbGFzcz0iY2wtZTExMmFkMmQiPjxwIGNsYXNzPSJjbC1lMTEyOWI4ZiI+PHNwYW4gY2xhc3M9ImNsLWUxMTA2NzEwIj4wLjAwPC9zcGFuPjwvcD48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PgpgYGAKCmBQTElOS2AgY2FsY3VsYXRlcyB0aGUgaW50ZXItaW5kaXZpZHVhbCByZWxhdGVkbmVzcyB1c2luZyB0aGUgYC0tZ2Vub21lYCBmdW5jdGlvbi4KCmBgYApwbGluayAtLWJmaWxlIGR1bW15X3Byb2plY3QvcmF3ZGF0YS5jbGVhbi51bHRyYWNsZWFuIC0tZ2Vub21lIC0tb3V0IGR1bW15X3Byb2plY3QvcmF3ZGF0YS5jbGVhbi51bHRyYWNsZWFuCmBgYAoKV2UgY2FuIG5vdyBpZGVudGlmeSBhbGwgcGFpcnMgb2YgaW5kaXZpZHVhbHMgd2l0aCBhbiBJQkQgPiAwLjE4NS4gVGhlIGNvZGUgbG9va3MgYXQgdGhlIGluZGl2aWR1YWwgY2FsbCByYXRlcyBzdG9yZWQgaW4gYHJhd2RhdGEuaW1pc3NgIGFuZCBvdXRwdXRzIHRoZSBJRHMgb2YgdGhlIGluZGl2aWR1YWwgd2l0aCB0aGUgbG93ZXN0IGNhbGwgcmF0ZSB0byDigJhmYWlsLUlCRC1RQy50eHTigJkgZm9yIHN1YnNlcXVlbnQgcmVtb3ZhbCAoVGFibGUgXEByZWYodGFiOnNob3dpYmRjYWxsaXNzdWVzKSkuCgpGaXJzdCwgbW92ZSB0byB0aGUgYGR1bW15X3Byb2plY3RgIGRpcmVjdG9yeS4KCmBgYApjZCBkdW1teV9wcm9qZWN0CmBgYAoKTm93LCBleGVjdXRlIHRoaXMgc2NyaXB0IC0gaXQgc2hvdWxkIHdvcmsganVzdCBmaW5lIG91dC1vZi10aGUtYm94LgoKYGBgCnBlcmwgLi4vc2NyaXB0cy9ydW4tSUJELVFDLnBsIHJhd2RhdGEgcmF3ZGF0YS5jbGVhbi51bHRyYWNsZWFuCmBgYAoKR28gYmFjayBvbmUgZGlyZWN0b3J5LgoKYGBgCmNkIC4uCmBgYAoKCgoKCgpgYGB7PWh0bWx9CjxkaXYgY2xhc3M9InRhYndpZCI+PHN0eWxlPi5jbC1lMTI5MDcyYXt9LmNsLWUxMjQ3ZjAye2ZvbnQtZmFtaWx5OidIZWx2ZXRpY2EnO2ZvbnQtc2l6ZToxMXB0O2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0eWxlOm5vcm1hbDt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjpyZ2JhKDAsIDAsIDAsIDEuMDApO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7fS5jbC1lMTI2NGRmMHttYXJnaW46MDt0ZXh0LWFsaWduOnJpZ2h0O2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtwYWRkaW5nLWJvdHRvbTo1cHQ7cGFkZGluZy10b3A6NXB0O3BhZGRpbmctbGVmdDo1cHQ7cGFkZGluZy1yaWdodDo1cHQ7bGluZS1oZWlnaHQ6IDE7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt9LmNsLWUxMjY1YWFje3dpZHRoOjAuNTY4aW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDEuNXB0IHNvbGlkIHJnYmEoMTAyLCAxMDIsIDEwMiwgMS4wMCk7Ym9yZGVyLXRvcDogMS41cHQgc29saWQgcmdiYSgxMDIsIDEwMiwgMTAyLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUxMjY1YWI2e3dpZHRoOjAuNTY4aW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMTI2NWFjMHt3aWR0aDowLjU2OGluO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXRvcDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1sZWZ0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLXJpZ2h0OiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7bWFyZ2luLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO30uY2wtZTEyNjVhYzF7d2lkdGg6MC41NjhpbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyLWJvdHRvbTogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9LmNsLWUxMjY1YWMye3dpZHRoOjAuNTY4aW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO2JvcmRlci1ib3R0b206IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItdG9wOiAwIHNvbGlkIHJnYmEoMCwgMCwgMCwgMS4wMCk7Ym9yZGVyLWxlZnQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItcmlnaHQ6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7fS5jbC1lMTI2NWFjYXt3aWR0aDowLjU2OGluO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7dmVydGljYWwtYWxpZ246IG1pZGRsZTtib3JkZXItYm90dG9tOiAxLjVwdCBzb2xpZCByZ2JhKDEwMiwgMTAyLCAxMDIsIDEuMDApO2JvcmRlci10b3A6IDAgc29saWQgcmdiYSgwLCAwLCAwLCAxLjAwKTtib3JkZXItbGVmdDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO2JvcmRlci1yaWdodDogMCBzb2xpZCByZ2JhKDAsIDAsIDAsIDEuMDApO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDt9PC9zdHlsZT48dGFibGUgZGF0YS1xdWFydG8tZGlzYWJsZS1wcm9jZXNzaW5nPSd0cnVlJyBjbGFzcz0nY2wtZTEyOTA3MmEnPgoKYGBgCgo8Y2FwdGlvbiBzdHlsZT0iZGlzcGxheTp0YWJsZS1jYXB0aW9uOyI+KFwjdGFiOnNob3dpYmRjYWxsaXNzdWVzKTxzcGFuPkZhaWxlZCBJQkQgYW5kIGNhbGxyYXRlLjwvc3Bhbj48L2NhcHRpb24+CgpgYGB7PWh0bWx9Cgo8dGhlYWQ+PHRyIHN0eWxlPSJvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7Ij48dGggY2xhc3M9ImNsLWUxMjY1YWFjIj48cCBjbGFzcz0iY2wtZTEyNjRkZjAiPjxzcGFuIGNsYXNzPSJjbC1lMTI0N2YwMiI+RklEPC9zcGFuPjwvcD48L3RoPjx0aCBjbGFzcz0iY2wtZTEyNjVhYWMiPjxwIGNsYXNzPSJjbC1lMTI2NGRmMCI+PHNwYW4gY2xhc3M9ImNsLWUxMjQ3ZjAyIj5JSUQ8L3NwYW4+PC9wPjwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTEyNjVhYjYiPjxwIGNsYXNzPSJjbC1lMTI2NGRmMCI+PHNwYW4gY2xhc3M9ImNsLWUxMjQ3ZjAyIj4xLDk1Mjwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMjY1YWI2Ij48cCBjbGFzcz0iY2wtZTEyNjRkZjAiPjxzcGFuIGNsYXNzPSJjbC1lMTI0N2YwMiI+MSw5NTI8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTEyNjVhYzAiPjxwIGNsYXNzPSJjbC1lMTI2NGRmMCI+PHNwYW4gY2xhc3M9ImNsLWUxMjQ3ZjAyIj4xLDk1Mzwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMjY1YWMwIj48cCBjbGFzcz0iY2wtZTEyNjRkZjAiPjxzcGFuIGNsYXNzPSJjbC1lMTI0N2YwMiI+MSw5NTM8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTEyNjVhYzEiPjxwIGNsYXNzPSJjbC1lMTI2NGRmMCI+PHNwYW4gY2xhc3M9ImNsLWUxMjQ3ZjAyIj4xLDk1NDwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMjY1YWMxIj48cCBjbGFzcz0iY2wtZTEyNjRkZjAiPjxzcGFuIGNsYXNzPSJjbC1lMTI0N2YwMiI+MSw5NTQ8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTEyNjVhYzAiPjxwIGNsYXNzPSJjbC1lMTI2NGRmMCI+PHNwYW4gY2xhc3M9ImNsLWUxMjQ3ZjAyIj4xLDk1NTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMjY1YWMwIj48cCBjbGFzcz0iY2wtZTEyNjRkZjAiPjxzcGFuIGNsYXNzPSJjbC1lMTI0N2YwMiI+MSw5NTU8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTEyNjVhYzAiPjxwIGNsYXNzPSJjbC1lMTI2NGRmMCI+PHNwYW4gY2xhc3M9ImNsLWUxMjQ3ZjAyIj4xLDk1Nzwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMjY1YWMwIj48cCBjbGFzcz0iY2wtZTEyNjRkZjAiPjxzcGFuIGNsYXNzPSJjbC1lMTI0N2YwMiI+MSw5NTc8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTEyNjVhYzAiPjxwIGNsYXNzPSJjbC1lMTI2NGRmMCI+PHNwYW4gY2xhc3M9ImNsLWUxMjQ3ZjAyIj4xLDk1OTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMjY1YWMwIj48cCBjbGFzcz0iY2wtZTEyNjRkZjAiPjxzcGFuIGNsYXNzPSJjbC1lMTI0N2YwMiI+MSw5NTk8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTEyNjVhYzIiPjxwIGNsYXNzPSJjbC1lMTI2NGRmMCI+PHNwYW4gY2xhc3M9ImNsLWUxMjQ3ZjAyIj4xLDk2MTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMjY1YWMyIj48cCBjbGFzcz0iY2wtZTEyNjRkZjAiPjxzcGFuIGNsYXNzPSJjbC1lMTI0N2YwMiI+MSw5NjE8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTEyNjVhYzIiPjxwIGNsYXNzPSJjbC1lMTI2NGRmMCI+PHNwYW4gY2xhc3M9ImNsLWUxMjQ3ZjAyIj4xLDk2Mzwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMjY1YWMyIj48cCBjbGFzcz0iY2wtZTEyNjRkZjAiPjxzcGFuIGNsYXNzPSJjbC1lMTI0N2YwMiI+MSw5NjM8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTEyNjVhYzIiPjxwIGNsYXNzPSJjbC1lMTI2NGRmMCI+PHNwYW4gY2xhc3M9ImNsLWUxMjQ3ZjAyIj4xLDk2NTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMjY1YWMyIj48cCBjbGFzcz0iY2wtZTEyNjRkZjAiPjxzcGFuIGNsYXNzPSJjbC1lMTI0N2YwMiI+MSw5NjU8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTEyNjVhYzIiPjxwIGNsYXNzPSJjbC1lMTI2NGRmMCI+PHNwYW4gY2xhc3M9ImNsLWUxMjQ3ZjAyIj4xLDk2Nzwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMjY1YWMyIj48cCBjbGFzcz0iY2wtZTEyNjRkZjAiPjxzcGFuIGNsYXNzPSJjbC1lMTI0N2YwMiI+MSw5Njc8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTEyNjVhYzIiPjxwIGNsYXNzPSJjbC1lMTI2NGRmMCI+PHNwYW4gY2xhc3M9ImNsLWUxMjQ3ZjAyIj4xLDk2OTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMjY1YWMyIj48cCBjbGFzcz0iY2wtZTEyNjRkZjAiPjxzcGFuIGNsYXNzPSJjbC1lMTI0N2YwMiI+MSw5Njk8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTEyNjVhYzAiPjxwIGNsYXNzPSJjbC1lMTI2NGRmMCI+PHNwYW4gY2xhc3M9ImNsLWUxMjQ3ZjAyIj4xLDk3MTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMjY1YWMwIj48cCBjbGFzcz0iY2wtZTEyNjRkZjAiPjxzcGFuIGNsYXNzPSJjbC1lMTI0N2YwMiI+MSw5NzE8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTEyNjVhYzAiPjxwIGNsYXNzPSJjbC1lMTI2NGRmMCI+PHNwYW4gY2xhc3M9ImNsLWUxMjQ3ZjAyIj4xLDk3Mzwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMjY1YWMwIj48cCBjbGFzcz0iY2wtZTEyNjRkZjAiPjxzcGFuIGNsYXNzPSJjbC1lMTI0N2YwMiI+MSw5NzM8L3NwYW4+PC9wPjwvdGQ+PC90cj48dHIgc3R5bGU9Im92ZXJmbG93LXdyYXA6YnJlYWstd29yZDsiPjx0ZCBjbGFzcz0iY2wtZTEyNjVhY2EiPjxwIGNsYXNzPSJjbC1lMTI2NGRmMCI+PHNwYW4gY2xhc3M9ImNsLWUxMjQ3ZjAyIj4xLDk3NTwvc3Bhbj48L3A+PC90ZD48dGQgY2xhc3M9ImNsLWUxMjY1YWNhIj48cCBjbGFzcz0iY2wtZTEyNjRkZjAiPjxzcGFuIGNsYXNzPSJjbC1lMTI0N2YwMiI+MSw5NzU8L3NwYW4+PC9wPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+CmBgYAoKIyMgQW5jZXN0cmFsIGJhY2tncm91bmQKClVzaW5nIGEgKipQcmluY2lwYWwgQ29tcG9uZW50IEFuYWx5c2lzIChQQ0EpKiogd2UgY2FuIHJlZHVjZSB0aGUgZGltZW5zaW9ucyBvZiB0aGUgZGF0YSwgYW5kIHByb2plY3QgdGhlICJhbmNlc3RyYWwgZGlzdGFuY2VzIi4gSW4gb3RoZXIgd29yZHMsIHRoZSBwcmluY2lwYWwgY29tcG9uZW50IDEgKHRoZSBmaXJzdCBkaW1lbnNpb24pIGFuZCBwcmluY2lwYWwgY29tcG9uZW50IDIgKHRoZSBzZWNvbmQgZGltZW5zaW9uKSB3aGljaCB3aWxsIGNhcHR1cmUgbW9zdCBvZiB0aGUgdmFyaWF0aW9uIGluIHRoZSBkYXRhIGFuZCByZXByZXNlbnQgaG93IG11Y2ggZWFjaCBzYW1wbGUgaXMgYWxpa2UgdGhlIG5leHQuIEFuZCB3aGVuIGNvbXBhcmVkIHRvIGEgcmVmZXJlbmNlLCB5b3UgY2FuIGRlZHVjZSB0aGUgYW5jZXN0cmFsIGJhY2tncm91bmQgb2YgZWFjaCBzYW1wbGUgaW4geW91ciBkYXRhc2V0LiBPZiBjb3Vyc2UgdGhpcyBpcyByZWxhdGl2ZTogd2Ugd2lsbCBvbmx5IGtub3cgdGhhdCBhIGdpdmVuIHNhbXBsZSBpcyB2ZXJ5IG11Y2ggYSBsaWtlIHNhbXBsZXMgZnJvbSBhIGdpdmVuIHBvcHVsYXRpb24gdGhhdCBfZXhpc3RzIHRvZGF5Xy4gCgpOb3dhZGF5cyB3ZSBydW4gc3VjaCBQQ0EgYWdhaW5zdCBhIGxhcmdlIGFuZCBkaXZlcnNlIGRhdGFzZXQgY29udGFpbmluZyBtYW55IGRpZmZlcmVudCBwb3B1bGF0aW9ucy4gT2xkLXNjaG9vbCBHV0FTIChwcmUtMjAwOSkgd291bGQgY29tcGFyZSBhIGRhdGFzZXQgYWdhaW5zdCBbSGFwTWFwIDNdKGh0dHBzOi8vd3d3LmJyb2FkaW5zdGl0dXRlLm9yZy9tZWRpY2FsLWFuZC1wb3B1bGF0aW9uLWdlbmV0aWNzL2hhcG1hcC0zKXt0YXJnZXQ9Il9ibGFuayJ9LCBub3dhZGF5cyB3ZSBwcmVmZXIgYXQgYSBtaW5pbXVtIHRoZSBbMTAwMEcgcGhhc2UgMyBwb3B1bGF0aW9uc10oaHR0cHM6Ly93d3cuaW50ZXJuYXRpb25hbGdlbm9tZS5vcmcpe3RhcmdldD0iX2JsYW5rIn0uIEFuZCBpbiB0aG9zZSBhbmNpZW50IHRpbWVzIHRoZSBwcmVmZXJyZWQgc29mdHdhcmUgdG8gcnVuIGEgUENBIHdhcyBfRWlnZW5zb2Z0XyB3aGljaCBpcyBhIGJpdCB0cmlja3kgdG8gaW5zdGFsbCAoc2VlIENoYXB0ZXIgXEByZWYoZWlnZW5zb2Z0KSksIGJ1dCBub3dhZGF5cyBgUExJTktgIHByb3ZpZGVzIHRoZSBgLS1wY2FgLWZsYWcuIAoKRm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgcHJhY3RpY2FsIHByaW1lciB3ZSB3aWxsIHJ1biBQQ0EgdXNpbmcgYFBMSU5LYCBhbmQgaXRzIGAtLXBjYWAtZmxhZyBhZ2FpbnN0IGFuIGVhcmxpZXIgdmVyc2lvbiBvZiAxMDAwRywgcGhhc2UgMSwgd2hpY2ggaXMgc2xpZ2h0bHkgc21hbGxlciBhbmQganVzdCBhcyBnb29kIHRvIHVzZS4gCgojIyMgMTAwMEcgcGhhc2UgMQoKV2Ugd2lsbCBwcm9qZWN0IG91ciBkYXRhIHRvIHRoZSByZWZlcmVuY2UsIGluIHRoaXMgZXhhbXBsZSAxMDAwRyBwaGFzZSAxICgxMDAwRyksIHdoaWNoIGluY2x1ZGVzIGluZGl2aWR1YWxzIGZyb20gMTQgZGlzdGluY3QgZ2xvYmFsIHBvcHVsYXRpb25zIGFjcm9zcyA0ICdzdXBlcictcG9wdWxhdGlvbnMgKEV1cm9wZWFucyBbYEVVUmBdLCBBZnJpY2FucyBbYEFGUmBdLCBFYXN0LUFzaWFucyBbYEVBU2BdLCBhbmQgTGF0aW4gQW1lcmljYW5zIFtgQU1SYF0pLiBJbiB0aGUgcmVhbC13b3JsZCwgdXNpbmcgcGhhc2UgMSBtYXkgYmUganVzdCBmaW5lLCBidXQgaWYgeW91IHRoaW5rIHlvdXIgcG9wdWxhdGlvbiBldm9sdmVkIHRocm91Z2ggZXh0ZW5zaXZlIG1pZ3JhdGlvbiBpdCdzIHByb2JhYmx5IGJlc3QgdG8gdXNlIHBoYXNlIDMgZGF0YS4gSW4gb3RoZXIgd29yZHMsIHRoZSBjaG9pY2Ugb2YgcmVmZXJlbmNlIGlzIHJlYWxseSBkZXBlbmRpbmcgb24gdGhlIGRhdGFzZXQuCgpGaXJzdCwgd2Ugd2lsbCBtZXJnZSBvdXIgZGF0YSB3aXRoIDEwMDBHLiBUaGUgYWxsZWxlcyBhdCBlYWNoIG1hcmtlciBtdXN0IGJlIGFsaWduZWQgdG8gdGhlIHNhbWUgRE5BIHN0cmFuZCB0byBhbGxvdyBvdXIgZGF0YSB0byBtZXJnZSBjb3JyZWN0bHkuIEJlY2F1c2Ugbm90IGFsbCBTTlBzIGFyZSByZXF1aXJlZCBmb3IgdGhpcyBhbmFseXNpcyB0aGUgQS0+VCBhbmQgQy0+RyBTTlBzLCB3aGljaCBhcmUgbW9yZSBkaWZmaWN1bHQgdG8gYWxpZ24sIGNhbiBiZSBvbWl0dGVkLgoKIyMjIyBGaWx0ZXIgdGhlIDEwMDBHIGRhdGEKCkZpcnN0LCB3ZSBzaG91bGQgZ2V0IGEgbGlzdCBvZiByZWxldmFudCB2YXJpYW50cyBmcm9tIG91ciBgcmF3ZGF0YWAtZGF0YXNldC4gV2UgZG9uJ3QgbmVlZCB0aGUgb3RoZXIgdmFyaWFudHMgcHJlc2VudCBpbiB0aGUgMTAwMEcgZGF0YXNldCwgcmlnaHQ/CgpgYGAKY2F0IGR1bW15X3Byb2plY3QvcmF3ZGF0YS5iaW0gfCBncmVwICJycyIgPiBkdW1teV9wcm9qZWN0L2FsbC52YXJpYW50cy50eHQKYGBgCgpFeHRyYWN0IHRob3NlIGZyb20gdGhlIDEwMDBHIHBoYXNlIDEgZGF0YS4KCmBgYApwbGluayAtLWJmaWxlIHJlZl8xa2dfcGhhc2UxX2FsbC8xa2dfcGhhc2UxX2FsbCAtLWV4dHJhY3QgZHVtbXlfcHJvamVjdC9hbGwudmFyaWFudHMudHh0IC0tbWFrZS1iZWQgLS1vdXQgcmVmXzFrZ19waGFzZTFfYWxsLzFrZ19waGFzZTFfcmF3CmBgYAoKIyMjIyBGaWx0ZXIgQS9UICYgQy9HIFNOUHMKCkFzIGV4cGxhaW5lZCwgdGhlIEEvVCBhbmQgQy9HIFNOUHMgYXJlIHByb2JsZW1hdGljLCB3ZSB3YW50IHRvIGV4Y2x1ZGUgdGhlc2UgdG9vLiBTbyBsZXQncyBnZXQgYSBsaXN0IG9mIEEvVCBhbmQgQy9HIHZhcmlhbnRzIGZyb20gMTAwMEcgdG8gZXhjbHVkZSAtIHRoaXMgbWF5IHRha2UgYSB3aGlsZS4KCmBgYApjYXQgcmVmXzFrZ19waGFzZTFfYWxsLzFrZ19waGFzZTFfcmF3LmJpbSB8IFwKYXdrICcoJDUgPT0gIkEiICYmICQ2ID09ICJUIikgfHwgKCQ1ID09ICJUIiAmJiAkNiA9PSAiQSIpIHx8ICgkNSA9PSAiQyIgJiYgJDYgPT0gIkciKSB8fCAoJDUgPT0gIkciICYmICQ2ID09ICJDIiknIHwgYXdrICd7IHByaW50ICQyLCAkMSwgJDQsICQzLCAkNSwgJDYgfScgXAo+IHJlZl8xa2dfcGhhc2UxX2FsbC9hbGwuMWtnLmF0Y2cudmFyaWFudHMudHh0CmBgYAoKRXhjbHVkZSB0aG9zZSBBL1QgYW5kIEMvRyB2YXJpYW50cyBpbiBib3RoIGRhdGFzZXRzIGFuZCBhdCB0aGUgc2FtZSB0aW1lIGZpbHRlciB0byBvbmx5IHJldGFpbiBoaWdoLXF1YWxpdHkgZGF0YSBhbmQgZXhjbHVkZSBub24tYXV0b3NvbWFsIHZhcmlhbnRzLiAKCmBgYApwbGluayAtLWJmaWxlIHJlZl8xa2dfcGhhc2UxX2FsbC8xa2dfcGhhc2UxX3JhdyAtLWV4Y2x1ZGUgcmVmXzFrZ19waGFzZTFfYWxsL2FsbC4xa2cuYXRjZy52YXJpYW50cy50eHQgLW1ha2UtYmVkIC0tb3V0IHJlZl8xa2dfcGhhc2UxX2FsbC8xa2dfcGhhc2UxX3Jhd19ub19hdGNnCgpwbGluayAtLWJmaWxlIGR1bW15X3Byb2plY3QvcmF3ZGF0YSAtLWV4Y2x1ZGUgcmVmXzFrZ19waGFzZTFfYWxsL2FsbC4xa2cuYXRjZy52YXJpYW50cy50eHQgLS1tYWtlLWJlZCAtLW91dCBkdW1teV9wcm9qZWN0L3Jhd2RhdGFfMWtnX3BoYXNlMV9yYXdfbm9fYXRjZwpgYGAKCiMjIyMgTWVyZ2luZyBkYXRhc2V0cwoKVHJ5IGFuZCBtZXJnZSB0aGUgZGF0YS4KCmBgYApwbGluayAtLWJmaWxlIGR1bW15X3Byb2plY3QvcmF3ZGF0YV8xa2dfcGhhc2UxX3Jhd19ub19hdGNnIC0tYm1lcmdlIHJlZl8xa2dfcGhhc2UxX2FsbC8xa2dfcGhhc2UxX3Jhd19ub19hdGNnIC0tbWFrZS1iZWQgLS1vdXQgZHVtbXlfcHJvamVjdC9yYXdkYXRhLjFrZ19waGFzZTEKYGBgCgpUaGVyZSBwcm9iYWJseSBpcyBhbiBlcnJvciAuLi4KCmBgYApFcnJvcjogNzIgdmFyaWFudHMgd2l0aCAzKyBhbGxlbGVzIHByZXNlbnQuCiogSWYgeW91IGJlbGlldmUgdGhpcyBpcyBkdWUgdG8gc3RyYW5kIGluY29uc2lzdGVuY3ksIHRyeSAtLWZsaXAgd2l0aAogIGR1bW15X3Byb2plY3QvcmF3ZGF0YS4xa2dfcGhhc2UxLW1lcmdlLm1pc3NucC4KICAoV2FybmluZzogaWYgdGhlIHN1YnNlcXVlbnQgbWVyZ2Ugc2VlbXMgdG8gd29yaywgc3RyYW5kIGVycm9ycyBpbnZvbHZpbmcgU05QcwogIHdpdGggQS9UIG9yIEMvRyBhbGxlbGVzIHByb2JhYmx5IHJlbWFpbiBpbiB5b3VyIGRhdGEuICBJZiBMRCBiZXR3ZWVuIG5lYXJieQogIFNOUHMgaXMgaGlnaCwgLS1mbGlwLXNjYW4gc2hvdWxkIGRldGVjdCB0aGVtLikKKiBJZiB5b3UgYXJlIGRlYWxpbmcgd2l0aCBnZW51aW5lIG11bHRpYWxsZWxpYyB2YXJpYW50cywgd2UgcmVjb21tZW5kIGV4cG9ydGluZwogIHRoYXQgc3Vic2V0IG9mIHRoZSBkYXRhIHRvIFZDRiAodmlhIGUuZy4gJy0tcmVjb2RlIHZjZicpLCBtZXJnaW5nIHdpdGgKICBhbm90aGVyIHRvb2wvc2NyaXB0LCBhbmQgdGhlbiBpbXBvcnRpbmcgdGhlIHJlc3VsdDsgUExJTksgaXMgbm90IHlldCBzdWl0ZWQKICB0byBoYW5kbGluZyB0aGVtLgpTZWUgaHR0cHM6Ly93d3cuY29nLWdlbm9taWNzLm9yZy9wbGluay8xLjkvZGF0YSNtZXJnZTMgZm9yIG1vcmUgZGlzY3Vzc2lvbi4KYGBgCgpTbyBsZXQncyBmbGlwIHNvbWUgdmFyaWFudHMuCgpgYGAKcGxpbmsgLS1iZmlsZSBkdW1teV9wcm9qZWN0L3Jhd2RhdGEgLS1leGNsdWRlIHJlZl8xa2dfcGhhc2UxX2FsbC9hbGwuMWtnLmF0Y2cudmFyaWFudHMudHh0IC0tZmxpcCBkdW1teV9wcm9qZWN0L3Jhd2RhdGEuMWtnX3BoYXNlMS1tZXJnZS5taXNzbnAgLS1tYWtlLWJlZCAtLW91dCBkdW1teV9wcm9qZWN0L3Jhd2RhdGFfMWtnX3BoYXNlMV9yYXdfbm9fYXRjZwpgYGAKCkxldCdzIHRyeSBhZ2FpbiBhbmQgbWVyZ2UgdGhlIGRhdGEuCgpgYGAKcGxpbmsgLS1iZmlsZSBkdW1teV9wcm9qZWN0L3Jhd2RhdGFfMWtnX3BoYXNlMV9yYXdfbm9fYXRjZyAtLWJtZXJnZSByZWZfMWtnX3BoYXNlMV9hbGwvMWtnX3BoYXNlMV9yYXdfbm9fYXRjZyAtLW1ha2UtYmVkIC0tb3V0IGR1bW15X3Byb2plY3QvcmF3ZGF0YS4xa2dfcGhhc2UxCmBgYAoKVGhlcmUgc3RpbGwgaXMgYW4gZXJyb3IgLS0gdGhlcmUgYXJlIGEgZmV3IG11bHRpLWFsbGVsaWMgdmFyaWFudHMgcHJlc2VudCB3aGljaCBgUExJTktgIGNhbid0IGhhbmRsZS4gCgpgYGAKRXJyb3I6IDE0IHZhcmlhbnRzIHdpdGggMysgYWxsZWxlcyBwcmVzZW50LgoqIElmIHlvdSBiZWxpZXZlIHRoaXMgaXMgZHVlIHRvIHN0cmFuZCBpbmNvbnNpc3RlbmN5LCB0cnkgLS1mbGlwIHdpdGgKICBkdW1teV9wcm9qZWN0L3Jhd2RhdGEuMWtnX3BoYXNlMS1tZXJnZS5taXNzbnAuCiAgKFdhcm5pbmc6IGlmIHRoZSBzdWJzZXF1ZW50IG1lcmdlIHNlZW1zIHRvIHdvcmssIHN0cmFuZCBlcnJvcnMgaW52b2x2aW5nIFNOUHMKICB3aXRoIEEvVCBvciBDL0cgYWxsZWxlcyBwcm9iYWJseSByZW1haW4gaW4geW91ciBkYXRhLiAgSWYgTEQgYmV0d2VlbiBuZWFyYnkKICBTTlBzIGlzIGhpZ2gsIC0tZmxpcC1zY2FuIHNob3VsZCBkZXRlY3QgdGhlbS4pCiogSWYgeW91IGFyZSBkZWFsaW5nIHdpdGggZ2VudWluZSBtdWx0aWFsbGVsaWMgdmFyaWFudHMsIHdlIHJlY29tbWVuZCBleHBvcnRpbmcKICB0aGF0IHN1YnNldCBvZiB0aGUgZGF0YSB0byBWQ0YgKHZpYSBlLmcuICctLXJlY29kZSB2Y2YnKSwgbWVyZ2luZyB3aXRoCiAgYW5vdGhlciB0b29sL3NjcmlwdCwgYW5kIHRoZW4gaW1wb3J0aW5nIHRoZSByZXN1bHQ7IFBMSU5LIGlzIG5vdCB5ZXQgc3VpdGVkCiAgdG8gaGFuZGxpbmcgdGhlbS4KU2VlIGh0dHBzOi8vd3d3LmNvZy1nZW5vbWljcy5vcmcvcGxpbmsvMS45L2RhdGEjbWVyZ2UzIGZvciBtb3JlIGRpc2N1c3Npb24uCmBgYAoKTGV0J3MganVzdCByZW1vdmUgdGhlc2UgbXVsdGktYWxsZWxpYyB2YXJpYW50cy4KCmBgYApwbGluayAtLWJmaWxlIGR1bW15X3Byb2plY3QvcmF3ZGF0YV8xa2dfcGhhc2UxX3Jhd19ub19hdGNnIC0tZXhjbHVkZSBkdW1teV9wcm9qZWN0L3Jhd2RhdGEuMWtnX3BoYXNlMS1tZXJnZS5taXNzbnAgLS1tYWtlLWJlZCAtLW91dCBkdW1teV9wcm9qZWN0L3Jhd2RhdGFfMWtnX3BoYXNlMV9yYXdfbm9fYXRjZ19iaQpgYGAKCkFmdGVyIHJlbW92aW5nIHRob3NlIHBlc2t5IG11bHRpLWFsbGVsaWMgdmFyaWFudHMsIHdlIHNob3VsZCBiZSBhYmxlIHRvIG1lcmdlIHRoZSBkYXRhLiBXZSBzaG91bGQgdGFrZSBvZiB0aGUgZm9sbG93aW5nOgoKLSBleHRyYWN0IHRoZSBwcnVuZWQgU05QLXNldCAocmVtZW1iZXI/KSwgYC0tZXh0cmFjdCByYXdkYXRhL3Jhdy1HV0EtZGF0YS5wcnVuZS5pYCwgCi0gZXhjbHVkZSBub24tYXV0b3NvbWFsIHZhcmlhbnRzLCBgLS1hdXRvc29tZWAsIAotIGFuZCBvbmx5IGtlZXBpbmcgaGlnaC1xdWFsaXR5IGRhdGEsIGAtLW1hZiAwLjEwIC0tZ2VubyAwLjEwIC0taHdlIDFlLTNgLCAKPCEtLSBUSElTIENIVU5LIENPVUxEIEJFIFVTRUQgVE8gUkVNT1ZFIERVUExJQ0FURVMsIEJVVCBJVCBET0VTTidUIFdPUksgSU4gUExJTksgMS45IC0tPgo8IS0tIC0gcmVtb3ZlIG5vbi1mb3VuZGVycyBmcm9tIHRoZSAxMDAwRyBkYXRhLCBgLS1rZWVwLWZvdW5kZXJzYCwgLS0+CjwhLS0gLSByZW1vdmUgYW55IGR1cGxpY2F0ZSB2YXJpYW50cyBiYXNlZCBvbiBTTlBJRCwgYC0tcm0tZHVwIGZvcmNlLWZpcnN0YCAtLT4KPCEtLSAtIGFuZCBsaXN0IGFueSBkdXBsaWNhdGUgdmFyaWFudHMgYmFzZWQgb24gY2hyb21vc29tYWwgYmFzZSBwYWlyIHBvc2l0aW9uLCBgLS1saXN0LWR1cGxpY2F0ZS12YXJzYCAtLT4KCmBgYApwbGluayAtLWJmaWxlIGR1bW15X3Byb2plY3QvcmF3ZGF0YV8xa2dfcGhhc2UxX3Jhd19ub19hdGNnX2JpIFwKLS1ibWVyZ2UgcmVmXzFrZ19waGFzZTFfYWxsLzFrZ19waGFzZTFfcmF3X25vX2F0Y2cgXAotLWF1dG9zb21lIFwKLS1tYWYgMC4xMCAtLWdlbm8gMC4xMCAtLWh3ZSAxZS0zIFwKLS1leHRyYWN0IHJhd2RhdGEvcmF3LUdXQS1kYXRhLnBydW5lLmluIFwKLS1tYWtlLWJlZCAtLW91dCBkdW1teV9wcm9qZWN0L3Jhd2RhdGEuMWtnX3BoYXNlMS5jbGVhbgpgYGAKCjwhLS0gVEhJUyBDSFVOSyBDT1VMRCBCRSBVU0VEIFRPIFJFTU9WRSBEVVBMSUNBVEVTLCBCVVQgSVQgRE9FU04nVCBXT1JLIElOIFBMSU5LIDEuOSAtLT4KPCEtLSBgYGAgLS0+CjwhLS0gcGxpbmsgLS1iZmlsZSBkdW1teV9wcm9qZWN0L3Jhd2RhdGFfMWtnX3BoYXNlMV9yYXdfbm9fYXRjZ19iaSBcIC0tPgo8IS0tIC0tYm1lcmdlIHJlZl8xa2dfcGhhc2UxX2FsbC8xa2dfcGhhc2UxX3Jhd19ub19hdGNnIFwgLS0+CjwhLS0gLS1hdXRvc29tZSBcIC0tPgo8IS0tIC0tbWFmIDAuMTAgLS1nZW5vIDAuMTAgLS1od2UgMWUtMyBcIC0tPgo8IS0tIC0tZXh0cmFjdCByYXdkYXRhL3Jhdy1HV0EtZGF0YS5wcnVuZS5pbiBcIC0tPgo8IS0tIC0tbGlzdC1kdXBsaWNhdGUtdmFycyBcIC0tPgo8IS0tIC0tbWFrZS1iZWQgLS1vdXQgZHVtbXlfcHJvamVjdC9yYXdkYXRhLjFrZ19waGFzZTEucHJ1bmVkIC0tPgo8IS0tIGBgYCAtLT4KCjwhLS0gYGBgIC0tPgo8IS0tIHBsaW5rIC0tYmZpbGUgZHVtbXlfcHJvamVjdC9yYXdkYXRhLjFrZ19waGFzZTEucHJ1bmVkIFwgLS0+CjwhLS0gLS1leGNsdWRlIGR1bW15X3Byb2plY3QvcmF3ZGF0YS4xa2dfcGhhc2UxLnBydW5lZC5kdXB2YXIgXCAtLT4KPCEtLSAtLXJtLWR1cCBmb3JjZS1maXJzdCBcIC0tPgo8IS0tIC0tbWFrZS1iZWQgLS1vdXQgZHVtbXlfcHJvamVjdC9yYXdkYXRhLjFrZ19waGFzZTEuY2xlYW4gLS0+CjwhLS0gYGBgIC0tPgoKQmVmb3JlIHdlIGNvbnRpbnVlIGl0J3MgYmVzdCB0byBjbGVhbiB1cCBhIGJpdCBvZiB0aGUgbWVzcy4gCgpgYGAKcm0gLWZ2IGR1bW15X3Byb2plY3QvcmF3ZGF0YV8xa2dfcGhhc2UxX3Jhd19ub19hdGNnX2JpKiByZWZfMWtnX3BoYXNlMV9hbGwvMWtnX3BoYXNlMV9yYXdfbm9fYXRjZyogZHVtbXlfcHJvamVjdC9yYXdkYXRhLjFrZ19waGFzZTEucHJ1bmVkKiBkdW1teV9wcm9qZWN0L3Jhd2RhdGFfMWtnX3BoYXNlMV9yYXdfbm9fYXRjZyogZHVtbXlfcHJvamVjdC9yYXdkYXRhLjFrZ19waGFzZTEtbWVyZ2UqIGR1bW15X3Byb2plY3QvcmF3ZGF0YS4xa2dfcGhhc2UxLmJlZCBkdW1teV9wcm9qZWN0L3Jhd2RhdGEuMWtnX3BoYXNlMS5iaW0gZHVtbXlfcHJvamVjdC9yYXdkYXRhLjFrZ19waGFzZTEuZmFtIGR1bW15X3Byb2plY3QvcmF3ZGF0YS4xa2dfcGhhc2UxLmhoIGR1bW15X3Byb2plY3QvcmF3ZGF0YS4xa2dfcGhhc2UxLmxvZyByZWZfMWtnX3BoYXNlMV9hbGwvMWtnX3BoYXNlMV9yYXcuKgpgYGAKCk5vdyB3ZSBoYXZlIHByZXBhcmVkIG91ciBkYXRhc2V0IHdpdGggb25seSBoaWdoLXF1YWxpdHkgU05QcyB0aGF0IGhhdmUgZmV3IG1pc3NpbmcgZGF0YSwgdGhhdCBhcmUgaGlnaC1mcmVxdWVudCwgZXhjbHVkZSBwcm9ibGVtYXRpYyBnZW5vbWljIHJhbmdlcywgYW5kIG1lcmdlZCB0byB0aGUgMTAwMEcgcGhhc2UgMSByZWZlcmVuY2UgZGF0YXNldC4gWW91ciBvdXRwdXQgc2hvdWxkIGxvb2sgc29tZXRoaW5nIGxpa2UgdGhpczoKCmBgYApQTElOSyB2MS45MGI3LjIgNjQtYml0ICgxMSBEZWMgMjAyMykgICAgICAgICAgIHd3dy5jb2ctZ2Vub21pY3Mub3JnL3BsaW5rLzEuOS8KKEMpIDIwMDUtMjAyMyBTaGF1biBQdXJjZWxsLCBDaHJpc3RvcGhlciBDaGFuZyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYzCkxvZ2dpbmcgdG8gZHVtbXlfcHJvamVjdC9yYXdkYXRhLjFrZ19waGFzZTEuY2xlYW4ubG9nLgpPcHRpb25zIGluIGVmZmVjdDoKICAtLWF1dG9zb21lCiAgLS1iZmlsZSBkdW1teV9wcm9qZWN0L3Jhd2RhdGFfMWtnX3BoYXNlMV9yYXdfbm9fYXRjZ19iaQogIC0tYm1lcmdlIHJlZl8xa2dfcGhhc2UxX2FsbC8xa2dfcGhhc2UxX3Jhd19ub19hdGNnCiAgLS1leHRyYWN0IHJhd2RhdGEvcmF3LUdXQS1kYXRhLnBydW5lLmluCiAgLS1nZW5vIDAuMTAKICAtLWh3ZSAxZS0zCiAgLS1tYWYgMC4xMAogIC0tbWFrZS1iZWQKICAtLW91dCBkdW1teV9wcm9qZWN0L3Jhd2RhdGEuMWtnX3BoYXNlMS5jbGVhbgoKMTYzODQgTUIgUkFNIGRldGVjdGVkOyByZXNlcnZpbmcgODE5MiBNQiBmb3IgbWFpbiB3b3Jrc3BhY2UuCjIwMDAgcGVvcGxlIGxvYWRlZCBmcm9tIGR1bW15X3Byb2plY3QvcmF3ZGF0YV8xa2dfcGhhc2UxX3Jhd19ub19hdGNnX2JpLmZhbS4KMTA5MiBwZW9wbGUgdG8gYmUgbWVyZ2VkIGZyb20gcmVmXzFrZ19waGFzZTFfYWxsLzFrZ19waGFzZTFfcmF3X25vX2F0Y2cuZmFtLgpPZiB0aGVzZSwgMTA5MiBhcmUgbmV3LCB3aGlsZSAwIGFyZSBwcmVzZW50IGluIHRoZSBiYXNlIGRhdGFzZXQuCldhcm5pbmc6IE11bHRpcGxlIHBvc2l0aW9ucyBzZWVuIGZvciB2YXJpYW50ICdyczM5MzQ4MzQnLgpXYXJuaW5nOiBNdWx0aXBsZSBwb3NpdGlvbnMgc2VlbiBmb3IgdmFyaWFudCAncnMzNzM3NzI4Jy4KV2FybmluZzogTXVsdGlwbGUgcG9zaXRpb25zIHNlZW4gZm9yIHZhcmlhbnQgJ3JzNjY4Nzc3NicuCldhcm5pbmc6IE11bHRpcGxlIGNocm9tb3NvbWVzIHNlZW4gZm9yIHZhcmlhbnQgJ3JzMTA1MDMwMScuCldhcm5pbmc6IE11bHRpcGxlIGNocm9tb3NvbWVzIHNlZW4gZm9yIHZhcmlhbnQgJ3JzNDg1MCcuCjMxNzQ3NiBtYXJrZXJzIGxvYWRlZCBmcm9tIGR1bW15X3Byb2plY3QvcmF3ZGF0YV8xa2dfcGhhc2UxX3Jhd19ub19hdGNnX2JpLmJpbS4KMzEyMjM5IG1hcmtlcnMgdG8gYmUgbWVyZ2VkIGZyb20gcmVmXzFrZ19waGFzZTFfYWxsLzFrZ19waGFzZTFfcmF3X25vX2F0Y2cuYmltLgpPZiB0aGVzZSwgMTQgYXJlIG5ldywgd2hpbGUgMzEyMjI1IGFyZSBwcmVzZW50IGluIHRoZSBiYXNlIGRhdGFzZXQuCjMxMjE5MCBtb3JlIG11bHRpcGxlLXBvc2l0aW9uIHdhcm5pbmdzOiBzZWUgbG9nIGZpbGUuClBlcmZvcm1pbmcgc2luZ2xlLXBhc3MgbWVyZ2UgKDMwOTIgcGVvcGxlLCAzMDgzMTcgdmFyaWFudHMpLgpNZXJnZWQgZmlsZXNldCB3cml0dGVuIHRvIGR1bW15X3Byb2plY3QvcmF3ZGF0YS4xa2dfcGhhc2UxLmNsZWFuLW1lcmdlLmJlZCArCmR1bW15X3Byb2plY3QvcmF3ZGF0YS4xa2dfcGhhc2UxLmNsZWFuLW1lcmdlLmJpbSArCmR1bW15X3Byb2plY3QvcmF3ZGF0YS4xa2dfcGhhc2UxLmNsZWFuLW1lcmdlLmZhbSAuCjMwODMxNyB2YXJpYW50cyBsb2FkZWQgZnJvbSAuYmltIGZpbGUuCjMwOTIgcGVvcGxlICgxNTIyIG1hbGVzLCAxNTcwIGZlbWFsZXMpIGxvYWRlZCBmcm9tIC5mYW0uCjMwOTIgcGhlbm90eXBlIHZhbHVlcyBsb2FkZWQgZnJvbSAuZmFtLgotLWV4dHJhY3Q6IDQ5ODU2IHZhcmlhbnRzIHJlbWFpbmluZy4KVXNpbmcgMSB0aHJlYWQgKG5vIG11bHRpdGhyZWFkZWQgY2FsY3VsYXRpb25zIGludm9rZWQpLgpCZWZvcmUgbWFpbiB2YXJpYW50IGZpbHRlcnMsIDMwNzggZm91bmRlcnMgYW5kIDE0IG5vbmZvdW5kZXJzIHByZXNlbnQuCkNhbGN1bGF0aW5nIGFsbGVsZSBmcmVxdWVuY2llcy4uLiBkb25lLgpUb3RhbCBnZW5vdHlwaW5nIHJhdGUgaXMgMC45OTQ4NjcuCjI5OSB2YXJpYW50cyByZW1vdmVkIGR1ZSB0byBtaXNzaW5nIGdlbm90eXBlIGRhdGEgKC0tZ2VubykuCi0taHdlOiAxMzgyNSB2YXJpYW50cyByZW1vdmVkIGR1ZSB0byBIYXJkeS1XZWluYmVyZyBleGFjdCB0ZXN0LgoyNjE3IHZhcmlhbnRzIHJlbW92ZWQgZHVlIHRvIG1pbm9yIGFsbGVsZSB0aHJlc2hvbGQocykKKC0tbWFmLy0tbWF4LW1hZi8tLW1hYy8tLW1heC1tYWMpLgozMzExNSB2YXJpYW50cyBhbmQgMzA5MiBwZW9wbGUgcGFzcyBmaWx0ZXJzIGFuZCBRQy4KUGhlbm90eXBlIGRhdGEgaXMgcXVhbnRpdGF0aXZlLgotLW1ha2UtYmVkIHRvIGR1bW15X3Byb2plY3QvcmF3ZGF0YS4xa2dfcGhhc2UxLmNsZWFuLmJlZCArCmR1bW15X3Byb2plY3QvcmF3ZGF0YS4xa2dfcGhhc2UxLmNsZWFuLmJpbSArCmR1bW15X3Byb2plY3QvcmF3ZGF0YS4xa2dfcGhhc2UxLmNsZWFuLmZhbSAuLi4gZG9uZS4KYGBgCgpTbyBpbiB0b3RhbCB0aGVyZSBhcmUgMywwOTIgaW5kaXZpZHVhbHMsIDEsNTIyIG1hbGVzIGFuZCAxLDU3MCBmZW1hbGVzLCBhbmQgMywwNzggZm91bmRlcnMgYW5kIDE0IG5vbi1mb3VuZGVycy4gVGhlIHRvdGFsIGdlbm90eXBpbmcgcmF0ZSBpcyA5OS41JSBhbmQgMzMsMTE1IHZhcmlhbnRzIGFyZSBwcmVzZW50LgoKCiMjIyBQcmluY2lwYWwgY29tcG9uZW50IGFuYWx5c2lzCgpHcmVhdCwgd2UndmUgcHJlcGFyZWQgb3VyIGR1bW15IHByb2plY3QgZGF0YSBhbmQgbWVyZ2VkIHRoaXMgd2l0aCAxMDAwRyBwaGFzZSAxLiBMZXQncyBleGVjdXRlIHRoZSBQQ0EgdXNpbmcgYC0tcGNhYCBpbiBgUExJTktgLgoKYGBgCnBsaW5rIC0tYmZpbGUgZHVtbXlfcHJvamVjdC9yYXdkYXRhLjFrZ19waGFzZTEuY2xlYW4gLS1wY2EgLS1vdXQgZHVtbXlfcHJvamVjdC9yYXdkYXRhLjFrZ19waGFzZTEuY2xlYW4KYGBgCgojIyMgUGxvdHRpbmcgdGhlIFBDQSByZXN1bHRzCgpJZiBhbGwgaXMgcGVhY2h5LCB5b3UganVzdCBzdWNjZXNmdWxseSByYW4gUENBIGFnYWluc3QgMTAwMEcgcGhhc2UgMS4gVXNpbmcgYC0tcGNhYCB3ZSBoYXZlIGNhbGN1bGF0ZWQgcHJpbmNpcGFsIGNvbXBvbmVudHMgKFBDcyksIDIwIGluIHRvdGFsIGJ5IGRlZmF1bHQsIGFuZCB3ZSBjYW4gbm93IHN0YXJ0IHBsb3R0aW5nIHRoZW0uIExldCdzIGNyZWF0ZSBhIHNjYXR0ZXIgZGlhZ3JhbSBvZiB0aGUgZmlyc3QgdHdvIHByaW5jaXBhbCBjb21wb25lbnRzLCBpbmNsdWRpbmcgYWxsIGluZGl2aWR1YWxzIGluIHRoZSBmaWxlIGByYXdkYXRhLjFrZ19waGFzZTEuY2xlYW4uZWlnZW52ZWNgICh0aGUgZmlyc3QgYW5kIHNlY29uZCBwcmluY2lwYWwgY29tcG9uZW50cyBhcmUgY29sdW1ucyAzIGFuZCA0LCByZXNwZWN0aXZlbHkpLiBXZSBuZWVkIHRvIGNvbGxlY3Qgc29tZSBwZXItc2FtcGxlIGluZm9ybWF0aW9uIHRvIGNvbG9yIHRoZSBwb2ludHMgYWNjb3JkaW5nIHRvIHNhbXBsZSBvcmlnaW4uIAoKRmlyc3Qgd2UgY29sbGVjdCB0aGUgcmVzdWx0cyBmcm9tIHRoZSBgLS1wY2FgLCB0aGUgZHVtbXkgZGF0YSBwaGVub3R5cGUgaW5mb3JtYXRpb24sIGFuZCB0aGUgcmVmZXJlbmNlIHBvcHVsYXRpb24gaW5mb3JtYXRpb24uCgoKCgoKCgoKCgoKCkRlcml2ZSBQQzEgYW5kIFBDMiB0aHJlc2hvbGRzIHNvIHRoYXQgb25seSBpbmRpdmlkdWFscyB3aG8gbWF0Y2ggdGhlIGdpdmVuIGFuY2VzdHJhbCBwb3B1bGF0aW9uIGFyZSBpbmNsdWRlZC4gRm9yIHBvcHVsYXRpb25zIG9mIEV1cm9wZWFuIGRlc2NlbnQsIHRoaXMgd2lsbCBiZSBlaXRoZXIgdGhlIENFVSBvciBUU0kgMTAwMEcgaW5kaXZpZHVhbHMgKEZpZ3VyZSBcQHJlZihmaWc6c2hvd3BjYTFrZykpLiBIZXJlLCB3ZSBjaG9zZSB0byBleGNsdWRlIGFsbCBpbmRpdmlkdWFscyB3aXRoIGEgZmlyc3QgcHJpbmNpcGFsIGNvbXBvbmVudCBzY29yZSBsZXNzIHRoYW4gYDAuMDAyM2AuIAoKV3JpdGUgdGhlIEZJRCBhbmQgSUlEIG9mIHRoZXNlIGluZGl2aWR1YWxzIHRvIGEgZmlsZSBjYWxsZWQgYGZhaWwtYW5jZXN0cnktUUMudHh0YC4KCmBgYApjYXQgZHVtbXlfcHJvamVjdC9yYXdkYXRhLjFrZ19waGFzZTEuY2xlYW4uZWlnZW52ZWMgfCBcCmF3ayAnJDMgPCAwLjAwMjMnIHwgYXdrICd7IHByaW50ICQxLCAkMiB9JyA+IGR1bW15X3Byb2plY3QvZmFpbC1hbmNlc3RyeS1RQy50eHQKYGBgCgpDaG9vc2luZyB3aGljaCB0aHJlc2hvbGRzIHRvIGFwcGx5IChhbmQgdGh1cyB3aGljaCBpbmRpdmlkdWFscyB0byByZW1vdmUpIGlzIG5vdCBhIHN0cmFpZ2h0Zm9yd2FyZCBwcm9jZXNzLiBUaGUga2V5IGlzIHRvIHJlbW92ZSB0aG9zZSBpbmRpdmlkdWFscyB3aXRoIGdyZWF0bHkgZGl2ZXJnZW50IGFuY2VzdHJ5LCBhcyB0aGVzZSBzYW1wbGVzIGludHJvZHVjZSB0aGUgbW9zdCBiaWFzIHRvIHRoZSBzdHVkeS4gSWRlbnRpZmljYXRpb24gb2YgbW9yZSBmaW5lLXNjYWxlIGFuY2VzdHJ5IGNhbiBiZSBjb25kdWN0ZWQgYnkgdXNpbmcgbGVzcyBkaXZlcmdlbnQgcmVmZXJlbmNlIHNhbXBsZXMgKF9lLmcuXywgd2l0aGluIEV1cm9wZSwgc3RyYXRpZmljYXRpb24gY291bGQgYmUgaWRlbnRpZmllZCB1c2luZyB0aGUgQ0VVLCBUU0kgKEl0YWxpYW4pLCBHQlIgKEJyaXRpc2gpLCBGSU4gKEZpbm5pc2gpIGFuZCBJQlMgKEliZXJpYW4pIHNhbXBsZXMgZnJvbSB0aGUgMSwwMDAgR2Vub21lcyBQcm9qZWN0IChodHRwOi8vd3d3LjEwMDBnZW5vbWVzLm9yZy8pKS4gUm9idXN0IGlkZW50aWZpY2F0aW9uIG9mIGZpbmUtc2NhbGUgcG9wdWxhdGlvbiBzdHJ1Y3R1cmUgb2Z0ZW4gcmVxdWlyZXMgdGhlIGNvbnN0cnVjdGlvbiBvZiBtYW55ICgy4oCTMTApIHByaW5jaXBhbCBjb21wb25lbnRzLgoKPGRpdiBjbGFzcz0iZmlndXJlIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyIj4KPGltZyBzcmM9ImltZy9fZ3dhc19kdW1teS9nd2FzLXFjLXBjYS0xMDAwZy5wbmciIGFsdD0iUENBIC0gWW91ciBkYXRhIHZzLiAxMDAwZy4iIHdpZHRoPSI4NSUiIC8+CjxwIGNsYXNzPSJjYXB0aW9uIj4oXCNmaWc6c2hvd3BjYTFrZylQQ0EgLSBZb3VyIGRhdGEgdnMuIDEwMDBnLjwvcD4KPC9kaXY+CgoKIyMgUmVtb3Zpbmcgc2FtcGxlcwoKRmluYWxseSEgV2UgaGF2ZSBhIGxpc3Qgb2Ygc2FtcGxlcyBvZiBwb29yIHF1YWxpdHkgb3IgZGl2ZXJnZW50IGFuY2VzdHJ5LCBhbmQgZHVwbGljYXRlZCBvciByZWxhdGVkIHNhbXBsZXMuIFdlIHNob3VsZCByZW1vdmUgdGhlc2UuIExldCdzIGNvbGxlY3QgYWxsIElEcyBmcm9tIG91ciBgZmFpbC0qYC1maWxlcyBpbnRvIGEgc2luZ2xlIGZpbGUuCgpgYGAKY2F0IGR1bW15X3Byb2plY3QvZmFpbC0qIHwgc29ydCAtazEgfCB1bmlxID4gZHVtbXlfcHJvamVjdC9mYWlsLXFjLWluZHMudHh0CmBgYAoKVGhpcyBuZXcgZmlsZSBzaG91bGQgbm93IGNvbnRhaW4gYSBsaXN0IG9mIHVuaXF1ZSBpbmRpdmlkdWFscyBmYWlsaW5nIHRoZSBwcmV2aW91cyBRQyBzdGVwcyB3aGljaCB3ZSB3YW50IHRvIHJlbW92ZS4KCmBgYApwbGluayAtLWJmaWxlIGR1bW15X3Byb2plY3QvcmF3ZGF0YSAtLXJlbW92ZSBkdW1teV9wcm9qZWN0L2ZhaWwtcWMtaW5kcy50eHQgLS1tYWtlLWJlZCAtLW91dCBkdW1teV9wcm9qZWN0L2NsZWFuX2luZHNfZGF0YQpgYGAKCj4gUXVlc3Rpb246IEhvdyBtYW55IHZhcmlhbnRzIGFuZCBzYW1wbGVzIGFyZSBsZWZ0PyBIb3cgbWFueSBjYXNlcyBhbmQgaG93IG1hbnkgY29udHJvbHMgZGlkIHlvdSBsb29zZT8gCgojIyBUaGUgbmV4dCBzdGVwCgpOb3cgdGhhdCB5b3UgZmlsdGVyZWQgc2FtcGxlcywgd2Ugc2hvdWxkIHR1cm4gb3VyIGF0dGVudGlvbiB0byBzdGVwIDIgb2YgdGhlIFFDIGZvciBHV0FTOiBpZGVudGlmeSBTTlBzIG9mIHBvb3IgcXVhbGl0eSBpbiBDaGFwdGVyIFxAcmVmKGd3YXNfYmFzaWNzX3NucF9xYykuCgo8IS0tIGBgYHtqcywgZWNobyA9IEZBTFNFfSAtLT4KPCEtLSB0aXRsZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGVhZGVyJyk7IC0tPgo8IS0tIHRpdGxlLmlubmVySFRNTCA9ICc8aW1nIHNyYz0iaW1nL19oZWFkZXJzL2d3YXNfc2FtcGxlX3FjLnBuZyIgYWx0PSJHV0FTIGJhc2ljczogU2FtcGxlIFFDIj4nICsgdGl0bGUuaW5uZXJIVE1MIC0tPgo8IS0tIGBgYCAtLT4KCjwhLS1jaGFwdGVyOmVuZDowM18yX2d3YXNfYmFzaWNzX3NhbXBsZV9xYy5SbWQtLT4KCiMgUGVyLVNOUCBRQyB7I2d3YXNfYmFzaWNzX3NucF9xY30KPCEtLSAhW10oLi9pbWcvX2d3YXNfZHVtbXkvZ3dhc19zbnBfcWMucG5nKXt3aWR0aD03MCV9IC0tPgoKCgoKCgpOb3cgdGhhdCB3ZSByZW1vdmVkIHNhbXBsZXMsIHdlIGNhbiBmb2N1cyBvbiBsb3ctcXVhbGl0eSB2YXJpYW50cy4KCiMjIFNOUCBjYWxsIHJhdGVzCgpXZSBzdGFydCBieSBjYWxjdWxhdGluZyB0aGUgbWlzc2luZyBnZW5vdHlwZSByYXRlIGZvciBlYWNoIFNOUCwgaW4gb3RoZXIgd29yZHMgdGhlIHBlci1TTlAgY2FsbCByYXRlLgoKYGBgCnBsaW5rIC0tYmZpbGUgZHVtbXlfcHJvamVjdC9jbGVhbl9pbmRzX2RhdGEgLS1taXNzaW5nIC0tb3V0IGR1bW15X3Byb2plY3QvY2xlYW5faW5kc19kYXRhCmBgYAoKTGV0J3MgdmlzdWFsaXplIHRoZSByZXN1bHRzIHRvIGlkZW50aWZ5IGEgdGhyZXNob2xkIGZvciBleHRyZW1lIGdlbm90eXBlIGZhaWx1cmUgcmF0ZS4gV2UgY2hvc2UgYSBjYWxscmF0ZSB0aHJlc2hvbGQgb2YgMyUsIGJ1dCBpdCdzIGFyYml0cmFyeSBhbmQgZGVwZW5kaW5nIG9uIHRoZSBkYXRhc2V0LCB0aGUgZGF0YSAodmlzdWFsaXphdGlvbiksIGFuZCB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgKEZpZ3VyZSBcQHJlZihmaWc6c2hvd3NucGNhbGxyYXRlKSkuCgoKCgoKCjxkaXYgY2xhc3M9ImZpZ3VyZSIgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+CjxpbWcgc3JjPSJpbWcvX2d3YXNfZHVtbXkvc2hvdy1zbnAtY2FsbHJhdGUucG5nIiBhbHQ9IlBlciBTTlAgY2FsbCByYXRlLiIgd2lkdGg9Ijg1JSIgLz4KPHAgY2xhc3M9ImNhcHRpb24iPihcI2ZpZzpzaG93c25wY2FsbHJhdGUpUGVyIFNOUCBjYWxsIHJhdGUuPC9wPgo8L2Rpdj4KCiMjIERpZmZlcmVudGlhbCBTTlAgY2FsbCByYXRlcwoKVGhlcmUgY291bGQgYWxzbyBiZSBkaWZmZXJlbmNlcyBpbiBnZW5vdHlwZSBjYWxsIHJhdGVzIGJldHdlZW4gY2FzZXMgYW5kIGNvbnRyb2xzLiBJdCBpcyB2ZXJ5IGltcG9ydGFudCB0byBjaGVjayBmb3IgdGhpcyBiZWNhdXNlIHRoZXNlIGRpZmZlcmVuY2VzIGNvdWxkIGxlYWQgdG8gc3B1cmlvdXMgYXNzb2NpYXRpb25zLiBXZSBjYW4gdGVzdCBhbGwgbWFya2VycyBmb3IgZGlmZmVyZW5jZXMgaW4gY2FsbCByYXRlIGJldHdlZW4gY2FzZXMgYW5kIGNvbnRyb2xzLCBvciBiYXNlZCBvbiBvdGhlciBjcml0ZXJpYS4KCmBgYApwbGluayAtLWJmaWxlIGR1bW15X3Byb2plY3QvY2xlYW5faW5kc19kYXRhIC0tdGVzdC1taXNzaW5nIC0tb3V0IGR1bW15X3Byb2plY3QvY2xlYW5faW5kc19kYXRhCmBgYAoKTGV0J3MgY29sbGVjdCBhbGwgdGhlIFNOUHMgd2l0aCBhIHNpZ25pZmljYW50bHkgZGlmZmVyZW50IChQIDwgMC4wMDAwMSkgbWlzc2luZyBkYXRhIHJhdGUgYmV0d2VlbiBjYXNlcyBhbmQgY29udHJvbHMuCgpgYGAKY2F0IGR1bW15X3Byb2plY3QvY2xlYW5faW5kc19kYXRhLm1pc3NpbmcgfCBhd2sgJyQ1IDwgMC4wMDAwMScgfCBhd2sgJ3sgcHJpbnQgJDIgfScgPiBkdW1teV9wcm9qZWN0L2ZhaWwtZGlmZm1pc3MtcWMudHh0CmBgYAoKIyMgQWxsZWxlIGZyZXF1ZW5jaWVzCgpXZSBzaG91bGQgYWxzbyBnZXQgYW4gaWRlYSBvbiB3aGF0IHRoZSBhbGxlbGUgZnJlcXVlbmNpZXMgYXJlIGluIG91ciBkYXRhc2V0LiBMb3cgZnJlcXVlbnQgU05QcyBzaG91bGQgcHJvYmFibHkgYmUgZXhjbHVkZWQsIGFzIHRoZXNlIGFyZSB1bmluZm9ybWF0aXZlIHdoZW4gbW9ub21vcnBoaWMgKGFsbGVsZSBmcmVxdWVuY3kgPSAwKSwgb3IgdGhleSBtYXkgbGVhZCB0byBzcHVyaW91cyBhc3NvY2lhdGlvbnMuCgpgYGAKcGxpbmsgLS1iZmlsZSBkdW1teV9wcm9qZWN0L2NsZWFuX2luZHNfZGF0YSAtLWZyZXEgLS1vdXQgZHVtbXlfcHJvamVjdC9jbGVhbl9pbmRzX2RhdGEKYGBgCgpMZXQncyBhbHNvIHBsb3QgdGhlc2UgZGF0YS4gWW91IGNhbiB2aWV3IHRoZSByZXN1bHQgYmVsb3csIGFuZCB0cnkgaXQgeW91cnNlbGYgKEZpZ3VyZSBcQHJlZihmaWc6c2hvd2ZyZXEpKS4KCgoKCgo8ZGl2IGNsYXNzPSJmaWd1cmUiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPgo8aW1nIHNyYz0iaW1nL19nd2FzX2R1bW15L3Nob3ctZnJlcS5wbmciIGFsdD0iTWlub3IgYWxsZWxlIGZyZXF1ZW5jeS4iIHdpZHRoPSI4NSUiIC8+CjxwIGNsYXNzPSJjYXB0aW9uIj4oXCNmaWc6c2hvd2ZyZXEpTWlub3IgYWxsZWxlIGZyZXF1ZW5jeS48L3A+CjwvZGl2PgoKIyMjIEEgbm90ZSBvbiBhbGxlbGUgY29kaW5nCgpPaCwgb25lIG1vcmUgdGhpbmcgYWJvdXQgYWxsZWxlcy4gCgpgUExJTktgIGNvZGVzIGFsbGVsZXMgYXMgZm9sbG93czoKCkExID0gbWlub3IgYWxsZWxlLCB0aGUgbGVhc3QgZnJlcXVlbnQgYWxsZWxlCkEyID0gbWFqb3IgYWxsZWxlLCB0aGUgbW9zdCBmcmVxdWVudCBhbGxlbGUKCkFuZCB3aGVuIHlvdSB1c2UgYFBMSU5LYCB0aGUgZmxhZyBgLS1mcmVxYCBvciBgLS1tYWZgIGlzIGFsd2F5cyByZWxhdGl2ZSB0byB0aGUgQTEtYWxsZWxlLCBhcyBpcyB0aGUgb2RkcyByYXRpbyAoT1IpIG9yIGVmZmVjdCBzaXplIChiZXRhKS4KCkhvd2V2ZXIsIGBTTlBURVNUYCBtYWtlcyB1c2Ugb2YgdGhlIHNvLWNhbGxlZCBPWEZPUkQtZm9ybWF0LCB0aGlzIGNvZGVzIGFsbGVsZXMgYXMgZm9sbG93czoKCkEgPSB0aGUgJ290aGVyJyBhbGxlbGUKQiA9IHRoZSAnY29kZWQnIGFsbGVsZQoKV2hlbiB5b3UgdXNlIGBTTlBURVNUYCBpdCB3aWxsIHJlcG9ydCB0aGUgYWxsZWxlIGZyZXF1ZW5jeSBhcyBgQ0FGYCwgaW4gb3RoZXIgd29yZHMgdGhlIF9jb2RlZCBhbGxlbGUgZnJlcXVlbmN5XywgYW5kIHRoZSBlZmZlY3Qgc2l6ZSAoYmV0YSkgaXMgYWx3YXlzIHJlbGF0aXZlIHRvIHRoZSBCLWFsbGVsZS4gVGhpcyBtZWFucywgYENBRmAgX2NvdWxkXyBiZSB0aGUgYE1BRmAsIG9yIF9taW5vciBhbGxlbGUgZnJlcXVlbmN5XywgYnV0IHRoaXMgaXMgKipub3QqKiBhIGdpdmVuLgoKSW4gb3RoZXIgd29yZHMsIGFsd2F5cyBtYWtlIHN1cmUgd2hhdCB0aGUgYWxsZWxlLWNvZGluZyBvZiBhIGdpdmVuIHByb2dyYW0sIGJlIGl0IGBQTElOS2AsIGBTTlBURVNUYCwgYEdDVEFgLCBfZXQgY2V0ZXJhXywgaXMhIEkgY2Fubm90IHN0cmVzcyB0aGlzIGVub3VnaC4gQXNrIHlvdXJzZWxmOiAnd2hhdCBpcyB0aGUgYWxsZWxlIGZyZXF1ZW5jeSByZWZlcnJpbmcgdG8/JywgJ3RoZSBlZmZlY3Qgc2l6ZSBpcyByZWxhdGl2ZSB0by4uLj8nLgoKUmlnaHQsIGxldCdzIGNvbnRpbnVlLgoKIyMgSGFyZHktV2VpbmJlcmcgRXF1aWxpYnJpdW0KCkJlY2F1c2Ugd2UgYXJlIHBlcmZvcm1pbmcgYSBjYXNlLWNvbnRyb2wgZ2Vub21lLXdpZGUgYXNzb2NpYXRpb24gc3R1ZHksIHdlIHByb2JhYmx5IGV4cGVjdCBzb21lIGRpZmZlcmVuY2VzIGluIEhhcmR5LVdlaW5iZXJnIEVxdWlsaWJyaXVtIChIV0UpLCBidXQgZXh0cmVtZSBkZXZpYXRpb25zIGFyZSBwcm9iYWJseSBpbmRpY2F0aXZlIG9mIGdlbm90eXBpbmcgZXJyb3JzLgoKYGBgCnBsaW5rIC0tYmZpbGUgZHVtbXlfcHJvamVjdC9jbGVhbl9pbmRzX2RhdGEgLS1oYXJkeSAtLW91dCBkdW1teV9wcm9qZWN0L2NsZWFuX2luZHNfZGF0YQpgYGAKCkxldCdzIGFsc28gcGxvdCB0aGVzZSBkYXRhLiBZb3UgY2FuIHZpZXcgdGhlIHJlc3VsdCBiZWxvdywgYW5kIHR5cGUgb3ZlciB0aGUgY29kZSB0byBkbyBpdCB5b3Vyc2VsZi4KCgoKCgoKPGRpdiBjbGFzcz0iZmlndXJlIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyIj4KPGltZyBzcmM9ImltZy9fZ3dhc19kdW1teS9zaG93LWh3ZS5wbmciIGFsdD0iSGFyZHktV2VpbmJlcmcgRXF1aWxpYnJpdW0gcC12YWx1ZXMgcGVyIHN0cmF0dW0uIiB3aWR0aD0iODUlIiAvPgo8cCBjbGFzcz0iY2FwdGlvbiI+KFwjZmlnOnNob3dod2UpSGFyZHktV2VpbmJlcmcgRXF1aWxpYnJpdW0gcC12YWx1ZXMgcGVyIHN0cmF0dW0uPC9wPgo8L2Rpdj4KCiMjIEZpbmFsIFNOUCBRQwoKV2UgYXJlIHJlYWR5IHRvIHBlcmZvcm0gdGhlIGZpbmFsIFFDLiBBZnRlciBpbnNwZWN0aW5nIHRoZSBncmFwaHMgd2Ugd2lsbCBmaWx0ZXIgb24gYSBNQUYgPCAwLjAxLCBjYWxsIHJhdGUgPCAwLjA1LCBhbmQgSFdFIDwgMC4wMDAwMSAoRmlndXJlIFxAcmVmKGZpZzpzaG93aHdlKSksIGluIGFkZGl0aW9uIHRob3NlIFNOUHMgdGhhdCBmYWlsZWQgdGhlIGRpZmZlcmVudGlhbCBjYWxsIHJhdGUgdGVzdCB3aWxsIGJlIHJlbW92ZWQuCgpgYGAKcGxpbmsgLS1iZmlsZSBkdW1teV9wcm9qZWN0L2NsZWFuX2luZHNfZGF0YSAtLWV4Y2x1ZGUgZHVtbXlfcHJvamVjdC9mYWlsLWRpZmZtaXNzLXFjLnR4dCAtLW1hZiAwLjAxIC0tZ2VubyAwLjA1IC0taHdlIDAuMDAwMDEgLS1tYWtlLWJlZCAtLW91dCBkdW1teV9wcm9qZWN0L2NsZWFuZGF0YQpgYGAKCiMjIEEgTWlsZXN0b25lCgpDb25ncmF0dWxhdGlvbnMuIFlvdSByZWFjaGVkIGEgdmVyeSBpbXBvcnRhbnQgbWlsZXN0b25lLiBOb3cgdGhhdCB5b3UgZmlsdGVyZWQgc2FtcGxlcyBhbmQgU05Qcywgd2UgY2FuIGZpbmFsbHkgc3RhcnQgdGhlIGFzc29jaWF0aW9uIGFuYWx5c2VzIGluIENoYXB0ZXIgXEByZWYoZ3dhc190ZXN0aW5nKS4KCjwhLS0gYGBge2pzLCBlY2hvID0gRkFMU0V9IC0tPgo8IS0tIHRpdGxlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZWFkZXInKTsgLS0+CjwhLS0gdGl0bGUuaW5uZXJIVE1MID0gJzxpbWcgc3JjPSJpbWcvX2hlYWRlcnMvZ3dhc19zbnBfcWMucG5nIiBhbHQ9IkdXQVMgYmFzaWNzOiBTTlAgUUMiPicgKyB0aXRsZS5pbm5lckhUTUwgLS0+CjwhLS0gYGBgIC0tPgoKPCEtLWNoYXB0ZXI6ZW5kOjAzXzNfZ3dhc19iYXNpY3Nfc25wX3FjLlJtZC0tPgoKIyBHZW5vbWUtV2lkZSBBc3NvY2lhdGlvbiBTdHVkeSB7I2d3YXNfdGVzdGluZ30KPCEtLSAhW10oLi9pbWcvX2d3YXMvaW50ZXJhY3RpdmVfcGxvdC5wbmcpe3dpZHRoPTcwJX0gLS0+CgoKCgoKCk5vdyB0aGF0IHlvdSBoYXZlIGxlYXJuZWQgaG93IHRvIHBlcmZvcm0gUUMsIHlvdSBjYW4gZWFzaWx5IHJ1biBhIEdXQVMgYW5kIGV4ZWN1dGUgc29tZSBkb3duc3RyZWFtIHZpc3VhbGl6YXRpb24gYW5kIGFuYWx5c2VzLiBMZXQncyBkbyB0aGlzIHdpdGggYSBkdW1teSBkYXRhc2V0LgoKIyMgRXhwbG9yaW5nIHRoZSBkYXRhCgpFdmVuIHRob3VnaCBzb21lb25lIHNheXMgdGhhdCB0aGUgUUMgd2FzIGRvbmUsIGl0IGlzIHN0aWxsIHdpc2UgYW5kIGdvb2QgcHJhY3RpY2UgdG8gcnVuIHNvbWUgb2YgdGhlIGNvbW1hbmRzIGFib3ZlIHRvIGdldCBhICdmZWVsaW5nJyBhYm91dCB0aGUgZGF0YS4gU28gbGV0J3MgZG8gdGhpcy4KCmBgYApwbGluayAtLWJmaWxlIGd3YXMvZ3dhIC0tZnJlcSAtLW91dCBkdW1teV9wcm9qZWN0L2d3YQpgYGAKCmBgYApwbGluayAtLWJmaWxlIGd3YXMvZ3dhIC0tbWlzc2luZyAtLW91dCBkdW1teV9wcm9qZWN0L2d3YQpgYGAKCmBgYApwbGluayAtLWJmaWxlIGd3YXMvZ3dhIC0taGFyZHkgLS1vdXQgZHVtbXlfcHJvamVjdC9nd2EKYGBgCgpMZXQncyB2aXN1YWxpemUgdGhlIHJlc3VsdHMuIEZpcnN0IHdlIHNob3VsZCBsb2FkIGluIGFsbCB0aGUgcmVzdWx0cy4KCj4gUXVlc3Rpb246IExvYWQgdGhlIGRhdGEgdXNpbmcgUi4gW0hpbnQ6IHVzZSBhbmQgYWRhcHQgdGhlIGV4YW1wbGVzIGZyb20gdGhlIHByZXZpb3VzIGNoYXB0ZXJzLl0KCgoKV2UgY2FuIHBsb3QgdGhlIHBlci1zdHJhdHVtIEhXRSBwLXZhbHVlcy4KCj4gUXVlc3Rpb246IFBsb3QgdGhlIHBlci1zdHJhdHVtIEhXRSBwLXZhbHVlcyB1c2luZyBSLiBbSGludDogdXNlIGFuZCBhZGFwdCB0aGUgZXhhbXBsZXMgZnJvbSB0aGUgcHJldmlvdXMgY2hhcHRlcnMuXQoKCgo8ZGl2IGNsYXNzPSJmaWd1cmUiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPgo8aW1nIHNyYz0iaW1nL19nd2FzX2R1bW15L3Nob3ctaHdlLWd3YXMucG5nIiBhbHQ9IlBlciBzdHJhdHVtIEhXRSBwLXZhbHVlcy4iIHdpZHRoPSI4NSUiIC8+CjxwIGNsYXNzPSJjYXB0aW9uIj4oXCNmaWc6dW5uYW1lZC1jaHVuay0yKVBlciBzdHJhdHVtIEhXRSBwLXZhbHVlcy48L3A+CjwvZGl2PgoKV2Ugd2lsbCB3YW50IHRvIHNlZSB3aGF0IHRoZSBkaXN0cmlidXRpb24gb2YgYWxsZWxlIGZyZXF1ZW5jaWVzIGxvb2tzIGxpa2UuIAoKPiBRdWVzdGlvbjogUGxvdCB0aGUgYWxsZWxlIGZyZXF1ZW5jaWVzIHVzaW5nIFIuIFtIaW50OiB1c2UgYW5kIGFkYXB0IHRoZSBleGFtcGxlcyBmcm9tIHRoZSBwcmV2aW91cyBjaGFwdGVycy5dCgoKCjxkaXYgY2xhc3M9ImZpZ3VyZSIgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+CjxpbWcgc3JjPSJpbWcvX2d3YXNfZHVtbXkvc2hvdy1mcmVxLWd3YXMucG5nIiBhbHQ9Ik1pbm9yIGFsbGVsZSBmcmVxdWVuY2llcy4iIHdpZHRoPSI4NSUiIC8+CjxwIGNsYXNzPSJjYXB0aW9uIj4oXCNmaWc6dW5uYW1lZC1jaHVuay0zKU1pbm9yIGFsbGVsZSBmcmVxdWVuY2llcy48L3A+CjwvZGl2PgoKV2Ugd2lsbCB3YW50IHRvIGlkZW50aWZ5IHNhbXBsZXMgdGhhdCBoYXZlIHBvb3IgY2FsbCByYXRlcy4KCj4gUXVlc3Rpb246IFBsb3QgdGhlIHBlci1zYW1wbGUgY2FsbCByYXRlcyB1c2luZyBSLiBbSGludDogdXNlIGFuZCBhZGFwdCB0aGUgZXhhbXBsZXMgZnJvbSB0aGUgcHJldmlvdXMgY2hhcHRlcnMuXQoKCgo8ZGl2IGNsYXNzPSJmaWd1cmUiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPgo8aW1nIHNyYz0iaW1nL19nd2FzX2R1bW15L3Nob3ctc2FtcGxlLWNhbGxyYXRlLWd3YXMucG5nIiBhbHQ9IlBlciBzYW1wbGUgY2FsbCByYXRlcy4iIHdpZHRoPSI4NSUiIC8+CjxwIGNsYXNzPSJjYXB0aW9uIj4oXCNmaWc6dW5uYW1lZC1jaHVuay00KVBlciBzYW1wbGUgY2FsbCByYXRlcy48L3A+CjwvZGl2PgoKV2UgYWxzbyBuZWVkIHRvIGtub3cgd2hhdCB0aGUgcGVyIFNOUCBjYWxsIHJhdGVzIGFyZS4KCj4gUXVlc3Rpb246IFBsb3QgdGhlIHBlci1TTlAgY2FsbCByYXRlcyB1c2luZyBSLiBbSGludDogdXNlIGFuZCBhZGFwdCB0aGUgZXhhbXBsZXMgZnJvbSB0aGUgcHJldmlvdXMgY2hhcHRlcnMuXQoKCgo8ZGl2IGNsYXNzPSJmaWd1cmUiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPgo8aW1nIHNyYz0iaW1nL19nd2FzX2R1bW15L3Nob3ctc25wLWNhbGxyYXRlLWd3YXMucG5nIiBhbHQ9IlBlciBTTlAgY2FsbCByYXRlcy4iIHdpZHRoPSI4NSUiIC8+CjxwIGNsYXNzPSJjYXB0aW9uIj4oXCNmaWc6dW5uYW1lZC1jaHVuay01KVBlciBTTlAgY2FsbCByYXRlcy48L3A+CjwvZGl2PgoKCiMjIEdlbmV0aWMgbW9kZWxzCkEgc2ltcGxlIGNoaS1zcXVhcmUgdGVzdCBvZiBhc3NvY2lhdGlvbiBjYW4gYmUgZG9uZS4KCmBgYApwbGluayAtLWJmaWxlIGd3YXMvZ3dhIC0tbW9kZWwgLS1vdXQgZ3dhcy9kYXRhCmBgYAoKX0dlbm90eXBpY18sIF9kb21pbmFudF8gYW5kIF9yZWNlc3NpdmVfIHRlc3RzIHdpbGwgbm90IGJlIGNvbmR1Y3RlZCBpZiBhbnkgb25lIG9mIHRoZSBjZWxscyBpbiB0aGUgdGFibGUgb2YgY2FzZS1jb250cm9sIGJ5IGdlbm90eXBlIGNvdW50cyBjb250YWlucyBsZXNzIHRoYW4gZml2ZSBvYnNlcnZhdGlvbnMuIFRoaXMgaXMgYmVjYXVzZSB0aGUgY2hpLXNxdWFyZSBhcHByb3hpbWF0aW9uIG1heSBub3QgYmUgcmVsaWFibGUgd2hlbiBjZWxsIGNvdW50cyBhcmUgc21hbGwuIEZvciBTTlBzIHdpdGggTUFGcyA8IDUlLCBhIHNhbXBsZSBvZiBtb3JlIHRoYW4gMiwwMDAgY2FzZXMgYW5kIGNvbnRyb2xzIHdvdWxkIGJlIHJlcXVpcmVkIHRvIG1lZXQgdGhpcyB0aHJlc2hvbGQgYW5kIG1vcmUgdGhhbiA1MCwwMDAgd291bGQgYmUgcmVxdWlyZWQgZm9yIFNOUHMgd2l0aCBNQUYgPCAxJS4KCllvdSBjYW4gY2hhbmdlIHRoaXMgZGVmYXVsdCBiZWhhdmlvdXIgYnkgYWRkaW5nIHRoZSBmbGFnIGAtLWNlbGxgLCBfZS5nLl8sIHdlIGNvdWxkIGxvd2VyIHRoZSB0aHJlc2hvbGQgdG8gMy4KCmBgYApwbGluayAtLWJmaWxlIGd3YXMvZ3dhIC0tbW9kZWwgLS1jZWxsIDMgLS1vdXQgZ3dhcy9kYXRhCmBgYAoKTGV0J3MgcmV2aWV3IHRoZSBjb250ZW50cyBvZiB0aGUgcmVzdWx0cy4KCgoKSXQgY29udGFpbnMgMSw1MzAsNTEwIHJvd3MsIG9uZSBmb3IgZWFjaCBTTlAsIGFuZCBlYWNoIHR5cGUgb2YgdGVzdCAoX2dlbm90eXBpY18sIF90cmVuZF8sIF9hbGxlbGljXywgX2RvbWluYW50XywgYW5kIF9yZWNlc3NpdmVfKSBhbmQgdGhlIGZvbGxvd2luZyBjb2x1bW5zOgoKLSBjaHJvbW9zb21lIFtgQ0hSYF0sCi0gdGhlIFNOUCBpZGVudGlmaWVyIFtgU05QYF0sCi0gdGhlIG1pbm9yIGFsbGVsZSBbYEExYF0gKHJlbWVtYmVyLCBgUExJTktgIGFsd2F5cyBjb2RlcyB0aGUgQTEtYWxsZWxlIGFzIHRoZSBtaW5vciBhbGxlbGUhKSwKLSB0aGUgbWFqb3IgYWxsZWxlIFtgQTJgXSwKLSB0aGUgdGVzdCBwZXJmb3JtZWQgW2BURVNUYF06CiAgLSBgR0VOT2AgKGdlbm90eXBpYyBhc3NvY2lhdGlvbik7CiAgLSBgVFJFTkRgIChDb2NocmFuLUFybWl0YWdlIHRyZW5kKTsKICAtIGBBTExFTElDYCAoYWxsZWxpYyBhcy0gc29jaWF0aW9uKTsKICAtIGBET01gIChkb21pbmFudCBtb2RlbCk7IGFuZAogIC0gYFJFQ2AgKHJlY2Vzc2l2ZSBtb2RlbCldLAotIHRoZSBjZWxsIGZyZXF1ZW5jeSBjb3VudHMgZm9yIGNhc2VzIFtgQUZGYF0sIAotIHRoZSBjZWxsIGZyZXF1ZW5jeSBjb3VudHMgZm9yIGNvbnRyb2xzIFtgVU5BRkZgXSwKLSB0aGUgY2hpLXNxdWFyZSB0ZXN0IHN0YXRpc3RpYyBbYENISVNRYF0sCi0gdGhlIGRlZ3JlZXMgb2YgZnJlZWRvbSBmb3IgdGhlIHRlc3QgW2BERmBdLAotIGFuZCB0aGUgYXN5bXB0b3RpYyBQIHZhbHVlIFtgUGBdIG9mIGFzc29jaWF0aW9uLgoKPiBRdWVzdGlvbjogRG8geW91IGtub3cgd2hpY2ggbW9kZWwsIF9pLmUuXyBgVEVTVGAgaXMgbW9zdCBjb21tb25seSB1c2VkIGFuZCByZXBvcnRlZD8gQW5kIHdoeSBpcyB0aGF0LCBkbyB0aGluaz8KCiMjIExvZ2lzdGljIHJlZ3Jlc3Npb24KV2UgY2FuIGFsc28gcGVyZm9ybSBhIHRlc3Qgb2YgYXNzb2NpYXRpb24gdXNpbmcgbG9naXN0aWMgcmVncmVzc2lvbi4gSW4gdGhpcyBjYXNlIHdlIG1pZ2h0IHdhbnQgdG8gY29ycmVjdCBmb3IgY292YXJpYXRlcy9jb25mb3VuZGluZyBmYWN0b3JzLCBmb3IgZXhhbXBsZSBhZ2UsIHNleCwgYW5jZXN0cmFsIGJhY2tncm91bmQsIGkuZS4gcHJpbmNpcGFsIGNvbXBvbmVudHMsIGFuZCBvdGhlciBzdHVkeSBzcGVjaWZpYyBjb3ZhcmlhdGVzIChlLmcuIGhvc3BpdGFsIG9mIGluY2x1c2lvbiwgZ2Vub3R5cGluZyBjZW50cmUgZXRjLikuIEluIHRoYXQgY2FzZSBlYWNoIG9mIHRoZXNlIFAgdmFsdWVzIGlzIGFkanVzdGVkIGZvciB0aGUgZWZmZWN0IG9mIHRoZSBjb3ZhcmlhdGVzLgoKV2hlbiBydW5uaW5nIGEgcmVncmVzc2lvbiBhbmFseXNpcywgYmUgaXQgbGluZWFyIG9yIGxvZ2lzdGljLCBQTElOSyBhc3N1bWVzIGEgbXVsdGlwbGljYXRpdmUgbW9kZWwuIEJ5IGRlZmF1bHQsIHdoZW4gYXQgbGVhc3Qgb25lIG1hbGUgYW5kIG9uZSBmZW1hbGUgaXMgcHJlc2VudCwgc2V4IChtYWxlID0gMSwgZmVtYWxlID0gMCkgaXMgYXV0b21hdGljYWxseSBhZGRlZCBhcyBhIGNvdmFyaWF0ZSBvbiBYIGNocm9tb3NvbWUgU05QcywgYW5kIG5vd2hlcmUgZWxzZS4gVGhlIGBzZXhgIGZsYWcgY2F1c2VzIGl0IHRvIGJlIGFkZGVkIGV2ZXJ5d2hlcmUsIHdoaWxlIGBuby14LXNleGAgZXhjbHVkZXMgaXQuCgpgYGAKcGxpbmsgLS1iZmlsZSBnd2FzL2d3YSAtLWxvZ2lzdGljIHNleCAtLWNvdmFyIGd3YXMvZ3dhLmNvdmFyIC0tb3V0IGd3YXMvZGF0YQpgYGAKCkxldCdzIGV4YW1pbmUgdGhlIHJlc3VsdHMuCgoKCmBgYAojIyBbMV0gOTE4MzA2ICAgICAgOQpgYGAKCgpgYGAKIyMgICAgICBDSFIgICAgICAgU05QICAgICAgQlAgICAgIEExICAgVEVTVCBOTUlTUyAgICAgT1IgICAgIFNUQVQgICAgICBQCiMjICAgIDxpbnQ+ICAgIDxjaGFyPiAgIDxpbnQ+IDxjaGFyPiA8Y2hhcj4gPGludD4gIDxudW0+ICAgIDxudW0+ICA8bnVtPgojIyAxOiAgICAgMSByczM5MzQ4MzQgIDk5NTY2OSAgICAgIFQgICAgQUREICAzODE4IDEuMDI5MCAgMC4zODEyMCAwLjcwMzEKIyMgMjogICAgIDEgcnMzOTM0ODM0ICA5OTU2NjkgICAgICBUICAgIEFHRSAgMzgxOCAxLjAwMjAgIDEuMTE4MDAgMC4yNjM1CiMjIDM6ICAgICAxIHJzMzkzNDgzNCAgOTk1NjY5ICAgICAgVCAgICBTRVggIDM4MTggMS4wMTIwICAwLjE5MDkwIDAuODQ4NgojIyA0OiAgICAgMSByczM3Mzc3MjggMTAxMTI3OCAgICAgIEEgICAgQUREICAzOTgyIDEuMDE5MCAgMC4zODY3MCAwLjY5OTAKIyMgNTogICAgIDEgcnMzNzM3NzI4IDEwMTEyNzggICAgICBBICAgIEFHRSAgMzk4MiAxLjAwMjAgIDEuMDk4MDAgMC4yNzIxCiMjIDY6ICAgICAxIHJzMzczNzcyOCAxMDExMjc4ICAgICAgQSAgICBTRVggIDM5ODIgMS4wMDYwICAwLjA5ODk4IDAuOTIxMgojIyA3OiAgICAgMSByczY2ODc3NzYgMTAyMDQyOCAgICAgIFQgICAgQUREICAzOTE1IDAuOTY5MiAtMC4zMzMzMCAwLjczODkKIyMgODogICAgIDEgcnM2Njg3Nzc2IDEwMjA0MjggICAgICBUICAgIEFHRSAgMzkxNSAxLjAwMjAgIDEuMDQwMDAgMC4yOTg0CiMjIDk6ICAgICAxIHJzNjY4Nzc3NiAxMDIwNDI4ICAgICAgVCAgICBTRVggIDM5MTUgMS4wMTUwICAwLjIzNjkwIDAuODEyNwpgYGAKCj4gUXVlc3Rpb246IEhvdyBjb21lIHRoZXJlIGFyZSBtb3JlIGxpbmVzIGluIHRoaXMgZmlsZSB0aGFuIHRoZXJlIGFyZSB2YXJpYW50cz8KCklmIG5vIG1vZGVsIG9wdGlvbiBpcyBzcGVjaWZpZWQsIHRoZSBmaXJzdCByb3cgZm9yIGVhY2ggU05QIGNvcnJlc3BvbmRzIHRvIHJlc3VsdHMgZm9yIGEgbXVsdGlwbGljYXRpdmUgdGVzdCBvZiBhc3NvY2lhdGlvbi4gVGhlIEMgPj0gMCBzdWJzZXF1ZW50IHJvd3MgZm9yIGVhY2ggU05QIGNvcnJlc3BvbmQgdG8gc2VwYXJhdGUgdGVzdHMgb2Ygc2lnbmlmaWNhbmNlIGZvciBlYWNoIG9mIHRoZSBDIGNvdmFyaWF0ZXMgaW5jbHVkZWQgaW4gdGhlIHJlZ3Jlc3Npb24gbW9kZWwuIFdlIGNhbiByZW1vdmUgdGhlIGNvdmFyaWF0ZS1zcGVjaWZpYyBsaW5lcyBmcm9tIHRoZSBtYWluIHJlcG9ydCBieSBhZGRpbmcgdGhlIGBoaWRlLWNvdmFyYCBmbGFnLgoKVGhlIGNvbHVtbnMgaW4gdGhlIGFzc29jaWF0aW9uIHJlc3VsdHMgYXJlOgoKLSB0aGUgY2hyb21vc29tZSBbYENIUmBdLAotIHRoZSBTTlAgaWRlbnRpZmllciBbYFNOUGBdLAotIHRoZSBiYXNlLXBhaXIgbG9jYXRpb24gW2BCUGBdLAotIHRoZSBtaW5vciBhbGxlbGUgW2BBMWBdLAotIHRoZSB0ZXN0IHBlcmZvcm1lZCBbYFRFU1RgXTogQUREIChtdWx0aXBsaWNhdGl2ZSBtb2RlbCBvciBnZW5vdHlwaWMgbW9kZWwgdGVzdGluZyBhZGRpdGl2aXR5KSwKICAtIGBHRU5PXzJERmAgKGdlbm90eXBpYyBtb2RlbCksCiAgLSBgRE9NREVWYCAoZ2Vub3R5cGljIG1vZGVsIHRlc3RpbmcgZGV2aWF0aW9uIGZyb20gYWRkaXRpdml0eSksCiAgLSBgRE9NYCAoZG9taW5hbnQgbW9kZWwpLCBvcgogIC0gYFJFQ2AgKHJlY2Vzc2l2ZSBtb2RlbCldLAotIHRoZSBudW1iZXIgb2YgbWlzc2luZyBpbmRpdmlkdWFscyBpbmNsdWRlZCBbYE5NSVNTYF0sCi0gdGhlIGBPUmAgcmVsYXRpdmUgdG8gdGhlIEExLCBfaS5lLl8gbWlub3IgYWxsZWxlLAotIHRoZSBjb2VmZmljaWVudCB6LXN0YXRpc3RpYyBbYFNUQVRgXSwgYW5kCi0gdGhlIGFzeW1wdG90aWMgUC12YWx1ZSBbYFBgXSBvZiBhc3NvY2lhdGlvbi4KCldlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBzdGFuZGFyZCBlcnJvciBhbmQgY29uZmlkZW5jZSBpbnRlcnZhbCBmcm9tIHRoZSB6LXN0YXRpc3RpYy4gV2UgY2FuIG1vZGlmeSB0aGUgZWZmZWN0IHNpemUgKGBPUmApIHRvIG91dHB1dCB0aGUgX2JldGFfIGJ5IGFkZGluZyB0aGUgYGJldGFgIGZsYWcuCgo+IFF1ZXN0aW9uOiBDYW4geW91IHdyaXRlIGRvd24gdGhlIG1hdGhlbWF0aWNhbCByZWxhdGlvbiBiZXR3ZWVuIF9iZXRhXyBhbmQgX09SXz8KCiMjIExldCdzIGdldCB2aXN1YWwKCkxvb2tpbmcgYXQgbnVtYmVycyBpcyBpbXBvcnRhbnQsIGJ1dCBpdCB3b24ndCBnaXZlIHlvdSBhIHBlcmZlY3Qgb3ZlcnZpZXcuIFdlIHNob3VsZCB0dXJuIHRvIHZpc3VhbGl6aW5nIG91ciByZXN1bHRzIGluIENoYXB0ZXIgXEByZWYoZ3dhcy12aXN1YWxzKS4KCjwhLS0gYGBge2pzLCBlY2hvID0gRkFMU0V9IC0tPgo8IS0tIHRpdGxlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZWFkZXInKTsgLS0+CjwhLS0gdGl0bGUuaW5uZXJIVE1MID0gJzxpbWcgc3JjPSJpbWcvX2hlYWRlcnMvaW50ZXJhY3RpdmVfcGxvdC5wbmciIGFsdD0iR1dBUyBiYXNpY3M6IGFzc29jaWF0aW9uIHRlc3RpbmciPicgKyB0aXRsZS5pbm5lckhUTUwgLS0+CjwhLS0gYGBgIC0tPgoKPCEtLWNoYXB0ZXI6ZW5kOjAzXzRfZ3dhc19iYXNpY3NfYXNzb2NpYXRpb25fdGVzdGluZy5SbWQtLT4KCiMgR1dBUyB2aXN1YWxpc2F0aW9uIHsjZ3dhcy12aXN1YWxzfQo8IS0tICFbXSguL2ltZy9faGVhZGVycy9pbnRlcmFjdGl2ZV9wbG90LnBuZyl7d2lkdGg9MTAwJX0gLS0+CgoKCgoKRGF0YSB2aXN1YWxpemF0aW9uIGlzIGtleSwgbm90IG9ubHkgZm9yIHByZXNlbnRhdGlvbiBidXQgYWxzbyB0byBpbnNwZWN0IHRoZSByZXN1bHRzLgoKIyMjIFFRIHBsb3RzCldlIHNob3VsZCBjcmVhdGUgX3F1YW50aWxlLXF1YW50aWxlIChRUSkgcGxvdHNfIHRvIGNvbXBhcmUgdGhlIG9ic2VydmVkIGFzc29jaWF0aW9uIHRlc3Qgc3RhdGlzdGljcyB3aXRoIHRoZWlyIGV4cGVjdGVkIHZhbHVlcyB1bmRlciB0aGUgbnVsbCBoeXBvdGhlc2lzIG9mIG5vIGFzc29jaWF0aW9uIGFuZCBzbyBhc3Nlc3MgdGhlIG51bWJlciwgbWFnbml0dWRlIGFuZCBxdWFsaXR5IG9mIHRydWUgYXNzb2NpYXRpb25zLgoKRmlyc3QsIHdlIHdpbGwgYWRkIHRoZSBzdGFuZGFyZCBlcnJvciwgY2FsbCByYXRlLCBBMiwgYW5kIGFsbGVsZSBmcmVxdWVuY2llcy4KCgpgYGAKIyMgS2V5OiA8U05QPgojIyAgICAgICAgICAgU05QICAgQ0hSICAgICAgICBCUCAgICAgQTEgTk1JU1MgICAgIE9SICAgIFNUQVQgICAgICAgUCAgICAgQTIgICAgTUFGCiMjICAgICAgICA8Y2hhcj4gPGludD4gICAgIDxpbnQ+IDxjaGFyPiA8aW50PiAgPG51bT4gICA8bnVtPiAgIDxudW0+IDxjaGFyPiAgPG51bT4KIyMgMTogcnMxMDAwMDAxMCAgICAgNCAgMjEyMjc3NzIgICAgICBDICAzOTk2IDEuMDQyMCAgMC45MDEwIDAuMzY3NjAgICAgICBUIDAuNDI1OAojIyAyOiByczEwMDAwMDIzICAgICA0ICA5NTk1MjkyOSAgICAgIFQgIDM5NTcgMC45OTAyIC0wLjIxNjAgMC44MjkwMCAgICAgIEcgMC40ODQxCiMjIDM6IHJzMTAwMDAwMzAgICAgIDQgMTAzNTkzMTc5ICAgICAgQSAgMzk5MSAwLjk3NzkgLTAuMzY5NiAwLjcxMTcwICAgICAgRyAwLjE2MTYKIyMgNDogIHJzMTAwMDAwNyAgICAgMiAyMzc0MTY3OTMgICAgICBDICA0MDAwIDEuMDE4MCAgMC4zNjQ5IDAuNzE1MjAgICAgICBUIDAuMzEyMgojIyA1OiByczEwMDAwMDkyICAgICA0ICAyMTUwNDYxNSAgICAgIEMgIDM5NjMgMC45MjQwIC0xLjY3NzAgMC4wOTM1NCAgICAgIFQgMC4zNDMwCiMjIDY6IHJzMTAwMDAxMjEgICAgIDQgMTU3NzkzNDg1ICAgICAgRyAgMzkxOSAwLjk2NjUgLTAuNzUyNSAwLjQ1MTcwICAgICAgQSAwLjQ1MzIKIyMgICAgTkNIUk9CUyBjYWxscmF0ZQojIyAgICAgIDxpbnQ+ICAgIDxudW0+CiMjIDE6ICAgIDc5OTIgIDAuOTk5MDAKIyMgMjogICAgNzkxNCAgMC45ODkyNQojIyAzOiAgICA3OTgyICAwLjk5Nzc1CiMjIDQ6ICAgIDgwMDAgIDEuMDAwMDAKIyMgNTogICAgNzkyNiAgMC45OTA3NQojIyA2OiAgICA3ODM4ICAwLjk3OTc1CmBgYAoKYGBgCiMjIFsxXSAzMDYxMDIgICAgIDE0CmBgYAoKYGBgCiMjICMgQSB0aWJibGU6IDYgw5cgMTQKIyMgICBTTlAgICAgICAgIENIUiAgICAgQlAgQTEgICAgQTIgICAgICBNQUYgY2FsbHJhdGUgTk1JU1MgTkNIUk9CUyAgICAgQkVUQSAgICAgU0UKIyMgICA8Y2hyPiAgICA8aW50PiAgPGludD4gPGNocj4gPGNocj4gPGRibD4gICAgPGRibD4gPGludD4gICA8aW50PiAgICA8ZGJsPiAgPGRibD4KIyMgMSByczEwMDAw4oCmICAgICA0IDIuMTJlNyBDICAgICBUICAgICAwLjQyNiAgICAwLjk5OSAgMzk5NiAgICA3OTkyICAwLjA0MTEgIDAuMDQ1NwojIyAyIHJzMTAwMDDigKYgICAgIDQgOS42MGU3IFQgICAgIEcgICAgIDAuNDg0ICAgIDAuOTg5ICAzOTU3ICAgIDc5MTQgLTAuMDA5ODUgMC4wNDU2CiMjIDMgcnMxMDAwMOKApiAgICAgNCAxLjA0ZTggQSAgICAgRyAgICAgMC4xNjIgICAgMC45OTggIDM5OTEgICAgNzk4MiAtMC4wMjIzICAwLjA2MDUKIyMgNCByczEwMDAw4oCmICAgICAyIDIuMzdlOCBDICAgICBUICAgICAwLjMxMiAgICAxICAgICAgNDAwMCAgICA4MDAwICAwLjAxNzggIDAuMDQ4OQojIyA1IHJzMTAwMDDigKYgICAgIDQgMi4xNWU3IEMgICAgIFQgICAgIDAuMzQzICAgIDAuOTkxICAzOTYzICAgIDc5MjYgLTAuMDc5MCAgMC4wNDcxCiMjIDYgcnMxMDAwMOKApiAgICAgNCAxLjU4ZTggRyAgICAgQSAgICAgMC40NTMgICAgMC45ODAgIDM5MTkgICAgNzgzOCAtMC4wMzQxICAwLjA0NTMKIyMgIyDihLkgMyBtb3JlIHZhcmlhYmxlczogT1IgPGRibD4sIFNUQVQgPGRibD4sIFAgPGRibD4KYGBgCgpMZXQncyBsaXN0IHRoZSBudW1iZXIgb2YgU05QcyBwZXIgY2hyb21vc29tZS4gVGhpcyBnaXZlcyBhIHByZXR0eSBnb29kIGlkZWEgYWJvdXQgdGhlIHBlci1jaHJvbW9zb21lIGNvdmVyYWdlLiBBbmQgaXQncyBhIHNhbml0eSBjaGVjazogZGlkIHRoZSB3aG9sZSBhbmFseXNpcyBydW4gcHJvcGVybHkgKHdlIGV4cGVjdCAyMiBjaHJvbW9zb21lcyk/CgoKCgoKPiBRdWVzdGlvbjogV2h5IGRvIHRoZSBudW1iZXIgb2YgdmFyaWFudHMgcGVyIGNocm9zb21lIChhcHByb3hpbWF0ZWx5KSBjb3JyZWxhdGUgd2l0aCB0aGUgY2hyb21vc29tZSBudW1iZXI/Cgo+IFF1ZXN0aW9uOiBXaGVyZSBhcmUgdGhlIGRhdGEgZm9yIGNocm9tb3NvbWUgWCwgWSBhbmQgTVQ/CgpMZXQncyBwbG90IHRoZSBRUSBwbG90IHRvIGRpYWdub3NlIG91ciBHV0FTLiAKCgo8ZGl2IGNsYXNzPSJmaWd1cmUiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPgo8aW1nIHNyYz0iaW1nL19nd2FzX2R1bW15L3Nob3ctcXEucG5nIiBhbHQ9IkEgUVEgcGxvdC4iIHdpZHRoPSI4NSUiIC8+CjxwIGNsYXNzPSJjYXB0aW9uIj4oXCNmaWc6c2hvdy1xcSlBIFFRIHBsb3QuPC9wPgo8L2Rpdj4KCiMjIE1hbmhhdHRhbiBwbG90cwoKV2UgYWxzbyBuZWVkIHRvIGNyZWF0ZSBhIF9NYW5oYXR0YW4gcGxvdF8gdG8gZGlzcGxheSB0aGUgYXNzb2NpYXRpb24gdGVzdCBQLXZhbHVlcyBhcyBhIGZ1bmN0aW9uIG9mIGNocm9tb3NvbWFsIGxvY2F0aW9uIGFuZCB0aHVzIHByb3ZpZGUgYSB2aXN1YWwgc3VtbWFyeSBvZiBhc3NvY2lhdGlvbiB0ZXN0IHJlc3VsdHMgdGhhdCBkcmF3IGltbWVkaWF0ZSBhdHRlbnRpb24gdG8gYW55IHJlZ2lvbnMgb2Ygc2lnbmlmaWNhbmNlIChGaWd1cmUgXEByZWYoZmlnOnNob3dtYW5oYXR0YW4pKS4KCgoKPGRpdiBjbGFzcz0iZmlndXJlIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyIj4KPGltZyBzcmM9ImltZy9fZ3dhc19kdW1teS9zaG93LW1hbmhhdHRhbi5wbmciIGFsdD0iQSBtYW5oYXR0YW4gcGxvdC4iIHdpZHRoPSI4NSUiIC8+CjxwIGNsYXNzPSJjYXB0aW9uIj4oXCNmaWc6c2hvd21hbmhhdHRhbilBIG1hbmhhdHRhbiBwbG90LjwvcD4KPC9kaXY+CgojIyBPdGhlciBwbG90cwoKSXQgaXMgYWxzbyBpbmZvcm1hdGl2ZSB0byBwbG90IHRoZSBkZW5zaXR5IHBlciBjaHJvbW9zb21lLiBXZSBjYW4gdXNlIHRoZSBgQ01wbG90YCBmb3IgdGhhdCB3aGljaCB5b3UgY2FuIGZpbmQgW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ZaW5MaUxpbi9SLUNNcGxvdCl7dGFyZ2V0PSJfYmxhbmsifS4gRm9yIG5vdyB3ZSBqdXN0IG1ha2UgdGhlc2UgZ3JhcGhzICdxdWljay1uLWRpcnR5JywgeW91IGNhbiBmdXJ0aGVyIHByZXR0aWZ5IHRoZW0sIGJ1dCB5b3UgZWFzaWx5IGxvb3NlIHRyYWNrIG9mIHRpbWUsIHNvIG1heWJlIGNhcnJ5IG9uLgoKCgoKCgo+IFF1ZXN0aW9uOiBXaGF0IGRvIHRoZSBncmV5IHNwb3RzIG9uIHRoZSBkZW5zaXR5IHBsb3QgaW5kaWNhdGU/CgpUaGlzIHdvdWxkIGxlYWQgdG8gdGhlIGZvbGxvd2luZyBncmFwaHMuIAo8ZGl2IGNsYXNzPSJmaWd1cmUiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPgo8aW1nIHNyYz0iaW1nL19nd2FzX2R1bW15L3Nob3ctY21wbG90LWFsbC1kZW5zaXR5LnBuZyIgYWx0PSJTTlAgZGVuc2l0eSBvZiB0aGUgYXNzb2NpYXRpb24gcmVzdWx0cy4iIHdpZHRoPSI4NSUiIC8+CjxwIGNsYXNzPSJjYXB0aW9uIj4oXCNmaWc6c2hvd2NtcGxvdGFsbGRlbnNpdHkpU05QIGRlbnNpdHkgb2YgdGhlIGFzc29jaWF0aW9uIHJlc3VsdHMuPC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9ImZpZ3VyZSIgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+CjxpbWcgc3JjPSJpbWcvX2d3YXNfZHVtbXkvc2hvdy1jbXBsb3QtYWxsLXFxLnBuZyIgYWx0PSJBIFFRIHBsb3QgaW5jbHVkaW5nIGEgOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgKGJsdWUgYXJlYSkgYW5kIGdlbm9tZS13aWRlIHNpZ25pZmljYW50IGhpdHMgKHJlZCkuIiB3aWR0aD0iODUlIiAvPgo8cCBjbGFzcz0iY2FwdGlvbiI+KFwjZmlnOnNob3djbXBsb3RhbGxxcSlBIFFRIHBsb3QgaW5jbHVkaW5nIGEgOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgKGJsdWUgYXJlYSkgYW5kIGdlbm9tZS13aWRlIHNpZ25pZmljYW50IGhpdHMgKHJlZCkuPC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9ImZpZ3VyZSIgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+CjxpbWcgc3JjPSJpbWcvX2d3YXNfZHVtbXkvc2hvdy1jbXBsb3QtYWxsLW1hbmhhdHRhbi5wbmciIGFsdD0iQSByZWd1bGFyIG1hbmhhdHRhbiBwbG90LiBDb2xvcmVkIGJ5IGNocm9tb3NvbWUsIHN1Z2dlc3RpdmUgaGl0cyBhcmUgZ3JlZW4sIGdlbm9tZS13aWRlIGhpdHMgYXJlIHJlZC4gVGhlIGJvdHRvbSBncmFwaCBzaG93cyB0aGUgcGVyLWNocm9tb3NvbWUgU05QIGRlbnNpdHkuIiB3aWR0aD0iODUlIiAvPgo8cCBjbGFzcz0iY2FwdGlvbiI+KFwjZmlnOnNob3djbXBsb3RhbGxtYW5oYXR0YW4pQSByZWd1bGFyIG1hbmhhdHRhbiBwbG90LiBDb2xvcmVkIGJ5IGNocm9tb3NvbWUsIHN1Z2dlc3RpdmUgaGl0cyBhcmUgZ3JlZW4sIGdlbm9tZS13aWRlIGhpdHMgYXJlIHJlZC4gVGhlIGJvdHRvbSBncmFwaCBzaG93cyB0aGUgcGVyLWNocm9tb3NvbWUgU05QIGRlbnNpdHkuPC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9ImZpZ3VyZSIgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+CjxpbWcgc3JjPSJpbWcvX2d3YXNfZHVtbXkvc2hvdy1jbXBsb3QtYWxsLWNpcmN1bGFyLnBuZyIgYWx0PSJBIGNpcmN1bGFyIG1hbmhhdHRhbi4iIHdpZHRoPSI4NSUiIC8+CjxwIGNsYXNzPSJjYXB0aW9uIj4oXCNmaWc6c2hvdy1jbXBsb3QtYWxsLWNpcmN1bGFyKUEgY2lyY3VsYXIgbWFuaGF0dGFuLjwvcD4KPC9kaXY+CgojIyBJbnRlcmFjdGl2ZSBwbG90cwoKWW91IGNhbiBhbHNvIG1ha2UgYW4gW2ludGVyYWN0aXZlIHZlcnNpb25dKGh0dHBzOi8vci1ncmFwaC1nYWxsZXJ5LmNvbS8xMDFfTWFuaGF0dGFuX3Bsb3QuaHRtbCl7dGFyZ2V0PSJfYmxhbmsifSBvZiB0aGUgTWFuaGF0dGFuIC0ganVzdCBiZWNhdXNlIHlvdSBjYW4uIFRoZSBjb2RlIGJlbG93IHNob3dzIHlvdSBob3cuCgoKYGBgCmxpYnJhcnkocGxvdGx5KQpsaWJyYXJ5KGRwbHlyKQoKIyBQcmVwYXJlIHRoZSBkYXRhc2V0IChhcyBhbiBleGFtcGxlIHdlIHVzZSB0aGUgZGF0YSAoZ3dhc1Jlc3VsdHMpIGZyb20gdGhlIGBxcW1hbmAtcGFja2FnZSkKZG9uIDwtIGd3YXNSZXN1bHRzICU+JQoKICAjIENvbXB1dGUgY2hyb21vc29tZSBzaXplCiAgZ3JvdXBfYnkoQ0hSKSAlPiUKICBzdW1tYXJpc2UoY2hyX2xlbj1tYXgoQlApKSAlPiUKCiAgIyBDYWxjdWxhdGUgY3VtdWxhdGl2ZSBwb3NpdGlvbiBvZiBlYWNoIGNocm9tb3NvbWUKICBtdXRhdGUodG90PWN1bXN1bShjaHJfbGVuKS1jaHJfbGVuKSAlPiUKICBzZWxlY3QoLWNocl9sZW4pICU+JQoKICAjIEFkZCB0aGlzIGluZm8gdG8gdGhlIGluaXRpYWwgZGF0YXNldAogIGxlZnRfam9pbihnd2FzUmVzdWx0cywgLiwgYnk9YygiQ0hSIj0iQ0hSIikpICU+JQoKICAjIEFkZCBhIGN1bXVsYXRpdmUgcG9zaXRpb24gb2YgZWFjaCBTTlAKICBhcnJhbmdlKENIUiwgQlApICU+JQogIG11dGF0ZSggQlBjdW09QlArdG90KSAlPiUKCiAgIyBBZGQgaGlnaGxpZ2h0IGFuZCBhbm5vdGF0aW9uIGluZm9ybWF0aW9uCiAgbXV0YXRlKCBpc19oaWdobGlnaHQ9aWZlbHNlKFNOUCAlaW4lIHNucHNPZkludGVyZXN0LCAieWVzIiwgIm5vIikpICU+JQoKICAjIEZpbHRlciBTTlAgdG8gbWFrZSB0aGUgcGxvdCBsaWdodGVyCiAgZmlsdGVyKC1sb2cxMChQKT4wLjUpCgojIFByZXBhcmUgWCBheGlzCmF4aXNkZiA8LSBkb24gJT4lIGdyb3VwX2J5KENIUikgJT4lIHN1bW1hcml6ZShjZW50ZXI9KCBtYXgoQlBjdW0pICsgbWluKEJQY3VtKSApIC8gMiApCgojIFByZXBhcmUgdGV4dCBkZXNjcmlwdGlvbiBmb3IgZWFjaCBTTlA6CmRvbiR0ZXh0IDwtIHBhc3RlKCJTTlA6ICIsIGRvbiRTTlAsICJcblBvc2l0aW9uOiAiLCBkb24kQlAsICJcbkNocm9tb3NvbWU6ICIsIGRvbiRDSFIsICJcbkxPRCBzY29yZToiLCAtbG9nMTAoZG9uJFApICU+JSByb3VuZCgyKSwgIlxuV2hhdCBlbHNlIGRvIHlvdSB3YW5uYSBrbm93Iiwgc2VwPSIiKQoKIyBNYWtlIHRoZSBwbG90CnAgPC0gZ2dwbG90KGRvbiwgYWVzKHg9QlBjdW0sIHk9LWxvZzEwKFApLCB0ZXh0PXRleHQpKSArCgogICAgIyBTaG93IGFsbCBwb2ludHMKICAgIGdlb21fcG9pbnQoIGFlcyhjb2xvcj1hcy5mYWN0b3IoQ0hSKSksIGFscGhhPTAuOCwgc2l6ZT0xLjMpICsKICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSByZXAoYygiZ3JleSIsICJza3libHVlIiksIDIyICkpICsKCiAgICAjIGN1c3RvbSBYIGF4aXM6CiAgICBzY2FsZV94X2NvbnRpbnVvdXMoIGxhYmVsID0gYXhpc2RmJENIUiwgYnJlYWtzPSBheGlzZGYkY2VudGVyICkgKwogICAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwgMCkpICsgICAgICMgcmVtb3ZlIHNwYWNlIGJldHdlZW4gcGxvdCBhcmVhIGFuZCB4IGF4aXMKCiAgICAjIEFkZCBoaWdobGlnaHRlZCBwb2ludHMKICAgIGdlb21fcG9pbnQoZGF0YT1zdWJzZXQoZG9uLCBpc19oaWdobGlnaHQ9PSJ5ZXMiKSwgY29sb3I9Im9yYW5nZSIsIHNpemU9MikgKwoKICAgICMgQ3VzdG9tIHRoZSB0aGVtZToKICAgIHRoZW1lX2J3KCkgKwogICAgdGhlbWUoCiAgICAgIGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIsCiAgICAgIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCkKICAgICkKZ2dwbG90bHkocCwgdG9vbHRpcD0idGV4dCIpCmBgYAoKCkl0IHdpbGwgcHJvZHVjZSBzb21ldGhpbmcgbGlrZSB0aGlzLgoKIVtdKGltZy9fZ3dhcy9pbnRlcmFjdGl2ZV9wbG90LnBuZykKCgpBZ2FpbiwgdGhpcyBpcyBhbiBleGFtcGxlIHdpdGggZHVtbXkgZGF0YSAtIHlvdSBjYW4gdHJ5IHRvIGRvIGl0IGZvciBvdXIgR1dBUywgYnV0IGNhcmVmdWwgd2l0aCB0aGUgdGltZS4gWW91IGNhbiBhbHNvIGNob29zZSB0byBjYXJyeSBvbi4KCllvdSB3aWxsIGVuY291bnRlciB0aGUgYWJvdmUgdHlwZXMgb2YgdmlzdWFsaXphdGlvbnMgaW4gYW55IGhpZ2gtcXVhbGl0eSBHV0FTIHBhcGVyLCBiZWNhdXNlIGVhY2ggaXMgc28gY3JpdGljYWxseSBpbmZvcm1hdGl2ZS4gVXN1YWxseSwgYW5hbHlzdHMgb2YgbGFyZ2Utc2NhbGUgbWV0YS1hbmFseXNlcyBvZiBHV0FTIHdpbGwgYWxzbyBzdHJhdGlmeSB0aGUgUVEtcGxvdHMgYmFzZWQgb24gdGhlIGltcHV0YXRpb24gcXVhbGl0eSAoaWYgeW91ciBHV0FTIHdhcyBpbXB1dGVkKSwgY2FsbCByYXRlLCBhbmQgYWxsZWxlIGZyZXF1ZW5jeSAoYWx0aG91Z2ggdGhhdCBpcyByYXJlbHkgc2hhcmVkIGluIHB1YmxpY2F0aW9ucywgbm90IGV2ZW4gaW4gc3VwcGxlbWVudGFsIG1hdGVyaWFsKS4KCgojIyBTdG9wIHBsYXlpbmcgYXJvdW5kCgpBbHJpZ2h0LiBJdCdzIHRpbWUgdG8gc3RvcCBwbGF5aW5nIGFyb3VuZCBhbmQgZG8gYSBxdWljayByZWNhcCBvZiB3aGF0IHlvdSd2ZSBsZWFybmVkLgoKMS4gWW91IGxlYXJuZWQgaG93IHRvIGNvbnZlcnQgZGF0YXNldHMuCjIuIFlvdSBsZWFybmVkIGhvdyB0byBleGVjdXRlIHNhbXBsZSBRQyBhbmQgY3JlYXRlIGRpYWdub3N0aWMgZ3JhcGhpY3MKMy4gWW91IGxlYXJuZWQgaG93IHRvIGRvIHRoZSBzYW1lIGZvciBTTlAgUUMKNC4gWW91IGxlYXJuZWQgaG93IHRvIGV4ZWN1dGUgYW4gYXNzb2NpYXRpb24gc3R1ZHkgZ2l2ZW4gYSBkYXRhc2V0LCBjb3ZhcmlhdGVzLCBhbmQgZGlmZmVyZW50IGFzc3VtcHRpb25zIHJlZ2FyZGluZyB0aGUgZ2VuZXRpYyBtb2RlbC4KNS4gWW91IGxlYXJuZWQgaG93IHRvIHZpc3VhbGl6ZSByZXN1bHRzIGFuZCBwbGF5ZWQgYXJvdW5kIHdpdGggZGlmZmVyZW50IHZpc3VhbHMuIAoKWW91IHNob3VsZCBiZSByZWFkeSBmb3IgdGhlIHJlYWwgc3R1ZmYuIEFuZCBpZiBub3QsIHRoZSBuZXh0IGNoYXB0ZXIgd2lsbCBoZWxwIHlvdSBnZXQgcmVhZHk6IENoYXB0ZXIgXEByZWYod3RjY2MxX2ludHJvKS4KCjwhLS0gYGBge2pzLCBlY2hvID0gRkFMU0V9IC0tPgo8IS0tIHRpdGxlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZWFkZXInKTsgLS0+CjwhLS0gdGl0bGUuaW5uZXJIVE1MID0gJzxpbWcgc3JjPSJpbWcvX2hlYWRlcnMvaW50ZXJhY3RpdmVfcGxvdC5wbmciIGFsdD0iR1dBUyBiYXNpY3M6IHZpc3VhbGl6YXRpb24iPicgKyB0aXRsZS5pbm5lckhUTUwgLS0+CjwhLS0gYGBgIC0tPgoKPCEtLWNoYXB0ZXI6ZW5kOjAzXzVfZ3dhc19iYXNpY3NfcmVzdWx0c192aXN1YWxpemF0aW9uLlJtZC0tPgoKIyBMaWNlbnNlcyBhbmQgZGlzY2xhaW1lcnMgeyNsaWNlbnNlfQo8IS0tICFbXShpbWcvX2hlYWRlcnMvbGljZW5zZXMucG5nKXt3aWR0aD0xMDAlfSAtLT4KCgoKCgojIyBDb3B5cmlnaHQKClRoaXMgYm9vayBhbmQgYWxsIGl0cyBtYXRlcmlhbCAoImNvbnRlbnQiKSBpcyBwcm90ZWN0ZWQgYnkgY29weXJpZ2h0IHVuZGVyIER1dGNoIENvcHlyaWdodCBsYXdzIGFuZCBpcyB0aGUgcHJvcGVydHkgb2YgdGhlIGF1dGhvciBvciB0aGUgcGFydHkgY3JlZGl0ZWQgYXMgdGhlIHByb3ZpZGVyIG9mIHRoZSBjb250ZW50LiBZb3UgbWF5IG5vdCBjb3B5LCByZXByb2R1Y2UsIGRpc3RyaWJ1dGUsIHB1Ymxpc2gsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSwgY3JlYXRlIGRlcml2YXRpdmUgd29ya3MsIHRyYW5zbWl0LCBvciBpbiBhbnkgd2F5IGV4cGxvaXQgYW55IHN1Y2ggY29udGVudCwgbm9yIG1heSB5b3UgZGlzdHJpYnV0ZSBhbnkgcGFydCBvZiB0aGlzIGNvbnRlbnQgb3ZlciBhbnkgbmV0d29yaywgaW5jbHVkaW5nIGEgbG9jYWwgYXJlYSBuZXR3b3JrLCBzZWxsIG9yIG9mZmVyIGl0IGZvciBzYWxlLCBvciB1c2Ugc3VjaCBjb250ZW50IHRvIGNvbnN0cnVjdCBhbnkga2luZCBvZiBkYXRhYmFzZS4gWW91IG1heSBub3QgYWx0ZXIgb3IgcmVtb3ZlIGFueSBjb3B5cmlnaHQgb3Igb3RoZXIgbm90aWNlIGZyb20gY29waWVzIG9mIHRoZSBjb250ZW50IG9uIHRoaXMgd2Vic2l0ZS4gQ29weWluZyBvciBzdG9yaW5nIGFueSBjb250ZW50IGV4Y2VwdCBhcyBwcm92aWRlZCBhYm92ZSBpcyBleHByZXNzbHkgcHJvaGliaXRlZCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgYXV0aG9yIG9yIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGlkZW50aWZpZWQgaW4gdGhlIGluZGl2aWR1YWwgY29udGVudCdzIGNvcHlyaWdodCBub3RpY2UuIEZvciBwZXJtaXNzaW9uIHRvIHVzZSB0aGlzIGNvbnRlbnQsIHBsZWFzZSBjb250YWN0IHRoZSBhdXRob3IuCgojIyBEaXNjbGFpbWVyCgpUaGUgY29udGVudCBjb250YWluZWQgaGVyZWluIGlzIHByb3ZpZGVkIG9ubHkgZm9yIGVkdWNhdGlvbmFsIGFuZCBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9yIGFzIHJlcXVpcmVkIGJ5IER1dGNoIGxhdy4gVGhlIGF1dGhvciBhdHRlbXB0ZWQgdG8gZW5zdXJlIHRoYXQgY29udGVudCBpcyBhY2N1cmF0ZSBhbmQgb2J0YWluZWQgZnJvbSByZWxpYWJsZSBzb3VyY2VzLCBidXQgZG9lcyBub3QgcmVwcmVzZW50IGl0IHRvIGJlIGVycm9yLWZyZWUuIFRoZSBhdXRob3IgbWF5IGFkZCwgYW1lbmQgb3IgcmVwZWFsIGFueSB0ZXh0LCBwcm9jZWR1cmUgb3IgcmVndWxhdGlvbiwgYW5kIGZhaWx1cmUgdG8gdGltZWx5IHBvc3Qgc3VjaCBjaGFuZ2VzIHRvIHRoaXMgYm9vayBzaGFsbCBub3QgYmUgY29uc3RydWVkIGFzIGEgd2FpdmVyIG9mIGVuZm9yY2VtZW50LiBUaGUgYXV0aG9yIGRvZXMgbm90IHdhcnJhbnQgdGhhdCBhbnkgZnVuY3Rpb25zIG9uIHRoaXMgd2Vic2l0ZSBvciB0aGUgY29udGVudHMgYW5kIHJlZmVyZW5jZXMgaGVyZWluIHdpbGwgYmUgdW5pbnRlcnJ1cHRlZCwgdGhhdCBkZWZlY3RzIHdpbGwgYmUgY29ycmVjdGVkLCBvciB0aGF0IHRoaXMgd2Vic2l0ZSBvciB0aGUgY29udGVudHMgYW5kIHJlZmVyZW5jZXMgd2lsbCBiZSBmcmVlIGZyb20gdmlydXNlcyBvciBvdGhlciBoYXJtZnVsIGNvbXBvbmVudHMuIEFueSBsaW5rcyB0byB0aGlyZCBwYXJ0eSBpbmZvcm1hdGlvbiBvbiB0aGUgYXV0aG9y4oCZcyB3ZWJzaXRlIGFyZSBwcm92aWRlZCBhcyBhIGNvdXJ0ZXN5IGFuZCBkbyBub3QgY29uc3RpdHV0ZSBhbiBlbmRvcnNlbWVudCBvZiB0aG9zZSBtYXRlcmlhbHMgb3IgdGhlIHRoaXJkIHBhcnR5IHByb3ZpZGluZyB0aGVtLgoKIyMgSW1hZ2VzIGFuZCBkYXRhIHVzZWQKCkkgdG9vayB0aGUgYXQtbW9zdCBjYXJlIHRvIHVzZSByZWZlciB0byB0aGUgb3JpZ2luYWwgd29ya3MgYW5kIGRhdGEgc291cmNlcyB3aGVyZSBuZWVkZWQuIExpa2V3aXNlLCBhbGwgdGhlIGltYWdlcyBjLnEuIGZpZ3VyZXMgYXJlIGVpdGhlciBwcm9kdWNlZCBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgYm9vaywgb3IgSSB0b29rIHRoZW0gZnJvbSBbKipVbnNwbGFzaCoqXShodHRwczovL3Vuc3BsYXNoLmNvbS9zL3Bob3Rvcy9sZWdhbCkgdG8gYnJpZ2h0ZW4gdXAgdGhlIGJvb2suIElmIHlvdSBmZWVsIEkgbWFkZSBhIG1pc3Rha2UgYW5kIHlvdXIgd29yayBzaG91bGQgYmUgcHJvcGVybHkgcmVmZXJlbmNlZCwgcGxlYXNlIGRvbid0IGhlc2l0YXRlIHRvIGNvbnRhY3QgbWUuIAoKVGhlc2UgYXJlIHRoZSBpbWFnZXMgZnJvbSAqKlVuc3BsYXNoKiogbGlzdGVkIGhlcmUgaW4gbm8gcGFydGljdWxhciBvcmRlci4KCi0gcGFwZXJzX29uX3dhbGwgLSBodHRwczovL3Vuc3BsYXNoLmNvbS9waG90b3Mvb3Blbi1ib29rLWxvdC1PYXFrN3FxTmhfYwotIHdvbWVuX2JlaGluZF9tYWNib29rIC0gaHR0cHM6Ly91bnNwbGFzaC5jb20vcGhvdG9zL3dvbWFuLXVzaW5nLW1hY2Jvb2stcHJvLXdpdGgtcGVyc29uLWluLXdoaXRlLXRvcC1iUFZNNG5PeTBSZwotIHdvbWFuX3dvcmtpbmdfb25fY29kZSAtIGh0dHBzOi8vdW5zcGxhc2guY29tL3Bob3Rvcy93b21hbi13ZWFyaW5nLWJsYWNrLXQtc2hpcnQtaG9sZGluZy13aGl0ZS1jb21wdXRlci1rZXlib2FyZC1ZSzBIUHdXREoxSQotIGxpY2Vuc2VzIC0gaHR0cHM6Ly91bnNwbGFzaC5jb20vcGhvdG9zL2Jvb2stbG90LW9uLWJsYWNrLXdvb2Rlbi1zaGVsZi16ZUgtbGphd0h0ZwoKIyMgQ29weXJpZ2h0CgpDb3B5cmlnaHQgMTk3OS0yMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLiBTYW5kZXIgVy4gdmFuIGRlciBMYWFuIHwgW3Mudy52YW5kZXJsYWFuIFthdF0gZ21haWwuY29tXShtYWlsdG86cy53LnZhbmRlcmxhYW5AZ21haWwuY29tKSB8IFtodHRwczovL3ZhbmRlcmxhYW5hbmQuc2NpZW5jZV0oaHR0cHM6Ly92YW5kZXJsYWFuYW5kLnNjaWVuY2Upe3RhcmdldD0iX2JsYW5rIn0uIFB1Ymxpc2hlZCB3aXRoIFtgYm9va2Rvd25gXShodHRwczovL2Jvb2tkb3duLm9yZy95aWh1aS9ib29rZG93bi8pe3RhcmdldD0iX2JsYW5rIn0uCgo8IS0tIGBgYHtqcywgZWNobyA9IEZBTFNFfSAtLT4KPCEtLSB0aXRsZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGVhZGVyJyk7IC0tPgo8IS0tIHRpdGxlLmlubmVySFRNTCA9ICc8aW1nIHNyYz0iaW1nL19oZWFkZXJzL2Jhbm5lcl9tYW5fc3RhbmRpbmdfZG5hLnBuZyIgYWx0PSJMaWNlbnNlcyI+JyArIHRpdGxlLmlubmVySFRNTCAtLT4KPCEtLSBgYGAgLS0+Cgo8IS0tY2hhcHRlcjplbmQ6MTFfbGljZW5zZXMuUm1kLS0+CgojIENvbG9waG9uCgoKCgoKVGhlIDIwMjIgYW5kIDIwMjQgZWRpdGlvbnMgb2YgdGhpcyBib29rIHdlcmUgcHJvZHVjZSBpbiBSU3R1ZGlvIGFuZCB3aXRoIHRoZSBgYm9va2Rvd25gIHBhY2thZ2UuIEJlbG93IGEgbGlzdGluZyBvZiBpbnN0YWxsZWQgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcywgdGhlIG9wZXJhdGluZyBzeXN0ZW0sIGFuZCB0aGVpciBzcGVjaWZpYyB2ZXJzaW9ucy4KCgpgYGAKIyMg4pSAIFNlc3Npb24gaW5mbyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKIyMgIHNldHRpbmcgIHZhbHVlCiMjICB2ZXJzaW9uICBSIHZlcnNpb24gNC4zLjMgKDIwMjQtMDItMjkpCiMjICBvcyAgICAgICBtYWNPUyBTb25vbWEgMTQuNQojIyAgc3lzdGVtICAgeDg2XzY0LCBkYXJ3aW4yMAojIyAgdWkgICAgICAgWDExCiMjICBsYW5ndWFnZSAoRU4pCiMjICBjb2xsYXRlICBlbl9VUy5VVEYtOAojIyAgY3R5cGUgICAgZW5fVVMuVVRGLTgKIyMgIHR6ICAgICAgIEFtZXJpY2EvTmV3X1lvcmsKIyMgIGRhdGUgICAgIDIwMjQtMDQtMDQKIyMgIHBhbmRvYyAgIDMuMS4xIEAgL0FwcGxpY2F0aW9ucy9SU3R1ZGlvLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvYXBwL3F1YXJ0by9iaW4vdG9vbHMvICh2aWEgcm1hcmtkb3duKQojIyAKIyMg4pSAIFBhY2thZ2VzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAojIyAgcGFja2FnZSAgICAgICAgICAgKiB2ZXJzaW9uIGRhdGUgKFVUQykgbGliIHNvdXJjZQojIyAgYXNrcGFzcyAgICAgICAgICAgICAxLjIuMCAgIDIwMjMtMDktMDMgWzJdIENSQU4gKFIgNC4zLjApCiMjICBib29rZG93biAgICAgICAgICAqIDAuMzguMSAgMjAyNC0wMy0yNiBbMl0gR2l0aHViIChyc3R1ZGlvL2Jvb2tkb3duQDUwYTFjMWUpCiMjICBic2xpYiAgICAgICAgICAgICAgIDAuNi4yICAgMjAyNC0wMy0yMiBbMl0gQ1JBTiAoUiA0LjMuMikKIyMgIGNhY2hlbSAgICAgICAgICAgICAgMS4wLjggICAyMDIzLTA1LTAxIFsyXSBDUkFOIChSIDQuMy4wKQojIyAgY2hyb21vdGUgICAgICAgICAgICAwLjIuMCAgIDIwMjQtMDItMTIgWzFdIENSQU4gKFIgNC4zLjIpCiMjICBjbGkgICAgICAgICAgICAgICAgIDMuNi4yICAgMjAyMy0xMi0xMSBbMl0gQ1JBTiAoUiA0LjMuMCkKIyMgIGNvbG9yc3BhY2UgICAgICAgICAgMi4xLTAgICAyMDIzLTAxLTIzIFsyXSBDUkFOIChSIDQuMy4wKQojIyAgY3JheW9uICAgICAgICAgICAgICAxLjUuMiAgIDIwMjItMDktMjkgWzJdIENSQU4gKFIgNC4zLjApCiMjICBjcnVsICAgICAgICAgICAgICAgIDEuNC4wICAgMjAyMy0wNS0xNyBbMl0gQ1JBTiAoUiA0LjMuMCkKIyMgIGN1cmwgICAgICAgICAgICAgICAgNS4yLjEgICAyMDI0LTAzLTAxIFsyXSBDUkFOIChSIDQuMy4yKQojIyAgZGF0YS50YWJsZSAgICAgICAgICAxLjE1LjQgIDIwMjQtMDMtMzAgWzFdIENSQU4gKFIgNC4zLjIpCiMjICBkaWdlc3QgICAgICAgICAgICAgIDAuNi4zNSAgMjAyNC0wMy0xMSBbMl0gQ1JBTiAoUiA0LjMuMikKIyMgIGV2YWx1YXRlICAgICAgICAgICAgMC4yMyAgICAyMDIzLTExLTAxIFsyXSBDUkFOIChSIDQuMy4wKQojIyAgZmFzdG1hcCAgICAgICAgICAgICAxLjEuMSAgIDIwMjMtMDItMjQgWzJdIENSQU4gKFIgNC4zLjApCiMjICBmbGV4dGFibGUgICAgICAgICAqIDAuOS41ICAgMjAyNC0wMy0wNiBbMV0gQ1JBTiAoUiA0LjMuMikKIyMgIGZvbnRCaXRzdHJlYW1WZXJhICAgMC4xLjEgICAyMDE3LTAyLTAxIFsyXSBDUkFOIChSIDQuMy4wKQojIyAgZm9udExpYmVyYXRpb24gICAgICAwLjEuMCAgIDIwMTYtMTAtMTUgWzJdIENSQU4gKFIgNC4zLjApCiMjICBmb250cXVpdmVyICAgICAgICAgIDAuMi4xICAgMjAxNy0wMi0wMSBbMl0gQ1JBTiAoUiA0LjMuMCkKIyMgIGZvcm1hdFIgICAgICAgICAgICogMS4xNCAgICAyMDIzLTAxLTE3IFsyXSBDUkFOIChSIDQuMy4wKQojIyAgZ2R0b29scyAgICAgICAgICAgICAwLjMuNyAgIDIwMjQtMDMtMDUgWzJdIENSQU4gKFIgNC4zLjIpCiMjICBnZm9udHMgICAgICAgICAgICAgIDAuMi4wICAgMjAyMy0wMS0wOCBbMl0gQ1JBTiAoUiA0LjMuMCkKIyMgIGdsdWUgICAgICAgICAgICAgICAgMS43LjAgICAyMDI0LTAxLTA5IFsyXSBDUkFOIChSIDQuMy4wKQojIyAgaHRtbHRvb2xzICAgICAgICAgICAwLjUuOCAgIDIwMjQtMDMtMjUgWzJdIENSQU4gKFIgNC4zLjIpCiMjICBodHRwY29kZSAgICAgICAgICAgIDAuMy4wICAgMjAyMC0wNC0xMCBbMl0gQ1JBTiAoUiA0LjMuMCkKIyMgIGh0dHB1diAgICAgICAgICAgICAgMS42LjE1ICAyMDI0LTAzLTI2IFsyXSBDUkFOIChSIDQuMy4yKQojIyAganF1ZXJ5bGliICAgICAgICAgICAwLjEuNCAgIDIwMjEtMDQtMjYgWzJdIENSQU4gKFIgNC4zLjApCiMjICBqc29ubGl0ZSAgICAgICAgICAgIDEuOC44ICAgMjAyMy0xMi0wNCBbMl0gQ1JBTiAoUiA0LjMuMCkKIyMgIGthYmxlRXh0cmEgICAgICAgICogMS40LjAgICAyMDI0LTAxLTI0IFsxXSBDUkFOIChSIDQuMy4yKQojIyAga25pdHIgICAgICAgICAgICAgKiAxLjQ1ICAgIDIwMjMtMTAtMzAgWzFdIENSQU4gKFIgNC4zLjApCiMjICBsYXRlciAgICAgICAgICAgICAgIDEuMy4yICAgMjAyMy0xMi0wNiBbMl0gQ1JBTiAoUiA0LjMuMCkKIyMgIGxpZmVjeWNsZSAgICAgICAgICAgMS4wLjQgICAyMDIzLTExLTA3IFsyXSBDUkFOIChSIDQuMy4wKQojIyAgbWFncml0dHIgICAgICAgICAgICAyLjAuMyAgIDIwMjItMDMtMzAgWzJdIENSQU4gKFIgNC4zLjApCiMjICBtaW1lICAgICAgICAgICAgICAgIDAuMTIgICAgMjAyMS0wOS0yOCBbMl0gQ1JBTiAoUiA0LjMuMCkKIyMgIG11bnNlbGwgICAgICAgICAgICAgMC41LjEgICAyMDI0LTA0LTAxIFsxXSBDUkFOIChSIDQuMy4yKQojIyAgb2ZmaWNlciAgICAgICAgICAgICAwLjYuNSAgIDIwMjQtMDItMjQgWzJdIENSQU4gKFIgNC4zLjIpCiMjICBvcGVuc3NsICAgICAgICAgICAgIDIuMS4xICAgMjAyMy0wOS0yNSBbMl0gQ1JBTiAoUiA0LjMuMCkKIyMgIHByb2Nlc3N4ICAgICAgICAgICAgMy44LjQgICAyMDI0LTAzLTE2IFsyXSBDUkFOIChSIDQuMy4yKQojIyAgcHJvbWlzZXMgICAgICAgICAgICAxLjIuMSAgIDIwMjMtMDgtMTAgWzJdIENSQU4gKFIgNC4zLjApCiMjICBwcyAgICAgICAgICAgICAgICAgIDEuNy42ICAgMjAyNC0wMS0xOCBbMl0gQ1JBTiAoUiA0LjMuMCkKIyMgIFI2ICAgICAgICAgICAgICAgICAgMi41LjEgICAyMDIxLTA4LTE5IFsyXSBDUkFOIChSIDQuMy4wKQojIyAgcmFnZyAgICAgICAgICAgICAgICAxLjMuMCAgIDIwMjQtMDMtMTMgWzJdIENSQU4gKFIgNC4zLjIpCiMjICBSY3BwICAgICAgICAgICAgICAgIDEuMC4xMiAgMjAyNC0wMS0wOSBbMl0gQ1JBTiAoUiA0LjMuMCkKIyMgIHJsYW5nICAgICAgICAgICAgICAgMS4xLjMgICAyMDI0LTAxLTEwIFsyXSBDUkFOIChSIDQuMy4wKQojIyAgcm1hcmtkb3duICAgICAgICAgKiAyLjI2LjEgIDIwMjQtMDMtMjYgWzJdIEdpdGh1YiAocnN0dWRpby9ybWFya2Rvd25AZWU2OWQ1OSkKIyMgIHJzdHVkaW9hcGkgICAgICAgICAgMC4xNi4wICAyMDI0LTAzLTI0IFsyXSBDUkFOIChSIDQuMy4yKQojIyAgc2FzcyAgICAgICAgICAgICAgICAwLjQuOSAgIDIwMjQtMDMtMTUgWzJdIENSQU4gKFIgNC4zLjIpCiMjICBzY2FsZXMgICAgICAgICAgICAgIDEuMy4wICAgMjAyMy0xMS0yOCBbMl0gQ1JBTiAoUiA0LjMuMCkKIyMgIHNlc3Npb25pbmZvICAgICAgICAgMS4yLjIgICAyMDIxLTEyLTA2IFsyXSBDUkFOIChSIDQuMy4wKQojIyAgc2hpbnkgICAgICAgICAgICAgICAxLjguMSAgIDIwMjQtMDMtMjYgWzJdIENSQU4gKFIgNC4zLjIpCiMjICBzdHJpbmdpICAgICAgICAgICAgIDEuOC4zICAgMjAyMy0xMi0xMSBbMl0gQ1JBTiAoUiA0LjMuMCkKIyMgIHN0cmluZ3IgICAgICAgICAgICAgMS41LjEgICAyMDIzLTExLTE0IFsyXSBDUkFOIChSIDQuMy4wKQojIyAgc3ZnbGl0ZSAgICAgICAgICAgICAyLjEuMyAgIDIwMjMtMTItMDggWzFdIENSQU4gKFIgNC4zLjApCiMjICBzeXN0ZW1mb250cyAgICAgICAgIDEuMC42ICAgMjAyNC0wMy0wNyBbMl0gQ1JBTiAoUiA0LjMuMikKIyMgIHRleHRzaGFwaW5nICAgICAgICAgMC4zLjcgICAyMDIzLTEwLTA5IFsyXSBDUkFOIChSIDQuMy4wKQojIyAgdGlueXRleCAgICAgICAgICAgKiAwLjUwICAgIDIwMjQtMDMtMTYgWzJdIENSQU4gKFIgNC4zLjIpCiMjICB1dWlkICAgICAgICAgICAgICAgIDEuMi0wICAgMjAyNC0wMS0xNCBbMl0gQ1JBTiAoUiA0LjMuMCkKIyMgIHZpcmlkaXNMaXRlICAgICAgICAgMC40LjIgICAyMDIzLTA1LTAyIFsyXSBDUkFOIChSIDQuMy4wKQojIyAgd2Vic2hvdCAgICAgICAgICAgKiAwLjUuNSAgIDIwMjMtMDYtMjYgWzFdIENSQU4gKFIgNC4zLjApCiMjICB3ZWJzaG90MiAgICAgICAgICAqIDAuMS4xICAgMjAyMy0wOC0xMSBbMV0gQ1JBTiAoUiA0LjMuMCkKIyMgIHdlYnNvY2tldCAgICAgICAgICAgMS40LjEgICAyMDIxLTA4LTE4IFsxXSBDUkFOIChSIDQuMy4wKQojIyAgeGZ1biAgICAgICAgICAgICAgICAwLjQzICAgIDIwMjQtMDMtMjUgWzJdIENSQU4gKFIgNC4zLjIpCiMjICB4bWwyICAgICAgICAgICAgICAgIDEuMy42ICAgMjAyMy0xMi0wNCBbMl0gQ1JBTiAoUiA0LjMuMCkKIyMgIHh0YWJsZSAgICAgICAgICAgICAgMS44LTQgICAyMDE5LTA0LTIxIFsyXSBDUkFOIChSIDQuMy4wKQojIyAgeWFtbCAgICAgICAgICAgICAgICAyLjMuOCAgIDIwMjMtMTItMTEgWzJdIENSQU4gKFIgNC4zLjApCiMjICB6aXAgICAgICAgICAgICAgICAgIDIuMy4xICAgMjAyNC0wMS0yNyBbMl0gQ1JBTiAoUiA0LjMuMikKIyMgCiMjICBbMV0gL1VzZXJzL3NsYWFuMy9MaWJyYXJ5L1IveDg2XzY0LzQuMy9saWJyYXJ5CiMjICBbMl0gL0xpYnJhcnkvRnJhbWV3b3Jrcy9SLmZyYW1ld29yay9WZXJzaW9ucy80LjMteDg2XzY0L1Jlc291cmNlcy9saWJyYXJ5CiMjIAojIyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKYGBgCgo8IS0tIGBgYHtqcywgZWNobyA9IEZBTFNFfSAtLT4KPCEtLSB0aXRsZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGVhZGVyJyk7IC0tPgo8IS0tIHRpdGxlLmlubmVySFRNTCA9ICc8aW1nIHNyYz0iaW1nL19oZWFkZXJzL2Jhbm5lcl9tYW5fc3RhbmRpbmdfZG5hLnBuZyIgYWx0PSJDb2xvZm9uIj4nICsgdGl0bGUuaW5uZXJIVE1MIC0tPgo8IS0tIGBgYCAtLT4KCjwhLS0gZXhhbXBsZTogaHR0cHM6Ly95ZWFyYm9va2Rpc2NvdmVyaWVzLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8wNS9Xcml0aW5nX2FfWWVhcmJvb2tfQ29sb3Bob24ucGRmIC0tPgo8IS0tIFNQRUNJQUwgVEhBTktTOiAoVGhlIHN0YWZmIHdyb3RlIGEgZmV3IHBhcmFncmFwaHMgYWJvdXQgdGhlIHllYXIgYW5kIG1lbnRpb25lZCBhIHZhcmlldHkgLS0+CjwhLS0gb2YgcGVvcGxlIHdobyB3ZXJlIGluc3RydW1lbnRhbCBpbiB0aGUgc3VjY2VzcyBvZiB0aGVpciB5ZWFyYm9vay4pIC0tPgo8IS0tIENPVkVSICYgRU5EU0hFRVRTOiBUaGUgMjAxMyBQaW5uYWNsZSBjb3ZlciBpcyBhIGZvdXItY29sb3IgbGl0aG9ncmFwaC4gQW4gaXJpZGVzY2VudCBmb2lsIC0tPgo8IS0tIGNvdmVycyBhIHBvcnRpb24gb2YgdGhlIHRoZW1lIGRlc2lnbi4gVGhlIGVuZHNoZWV0cyBhcmUgc3RhbmRhcmQgc3RvY2sgcGFwZXIuIFRoZSB0aGVtZSAtLT4KPCEtLSBjb25jZXB0IHdhcyBjcmVhdGVkIGFuZCBleHBhbmRlZCBieSB0aGUgZWRpdG9yaWFsIHRlYW0gYW5kIG1lbWJlcnMgb2YgdGhlIDIwMTMgUGlubmFjbGUgLS0+CjwhLS0gc3RhZmYuIENvdmVyIGFuZCBlbmRzaGVldHMgd2VyZSBkZXNpZ25lZCBieSBQaW5uYWNsZSBjby1lZGl0b3JzLWluLWNoaWVmIFJlZ2FuIEJyb3duIGFuZCAtLT4KPCEtLSBFbGxlbmEgU3VsbGl2YW4sIHdpdGggaW5zcGlyYXRpb24gcHJvdmlkZWQgYnkgYW4gZWFybHkgZGVzaWduIGZyb20gY28tcmVmZXJlbmNlIGVkaXRvciAtLT4KPCEtLSBBbWFuZGEgRmFycmVyLiAtLT4KPCEtLSBUWVBFICYgQ09MT1IgVFJFQVRNRU5UOiBCb2R5IGNvcHkgdGhyb3VnaG91dCB0aGUgYm9vayBpcyBzZXQgaW4gRnJ1dGlnZXIgTGlnaHQgLS0+CjwhLS0gQ29uZGVuc2VkICg4LjUgcHQuKSBDYXB0aW9ucyBhcmUgc2V0IGluIEZydXRpZ2VyIExpZ2h0IENvbmRlbnNlZCAoNy41IHB0LikgSGVhZGxpbmUgLS0+CjwhLS0gdHJlYXRtZW50cyBhcmUgZGVzaWduZWQgd2l0aCB2YXJpYXRpb25zIG9mIEFISiBOYXNodmlsbGUsIEFybm8gUHJvIGFuZCBGcnV0aWdlci4gUGhvdG8gLS0+CjwhLS0gY3JlZGl0cyBhbmQgc3ByZWFkIGNyZWRpdHMgYXBwZWFyIGluIEZydXRpZ2VyIEl0YWxpYyAoNiBwdC4pIC0tPgo8IS0tIEZvciBjb25zaXN0ZW5jeSwgYSBjb2xvciBwYWxldHRlIHdhcyBjaG9zZW4uIEluIGFkZGl0aW9uIHRvIHRoZSB0cmFkaXRpb25hbCBibGFjaywgdGhlIC0tPgo8IS0tIGZvbGxvd2luZyBjb2xvcnMgYXBwZWFyIHRocm91Z2hvdXQgdGhlIHB1YmxpY2F0aW9uOiBQYW50b25lIDE1MUMsIFBhbnRvbmUgMzAwNUMsIFBhbnRvbiAtLT4KPCEtLSAyOTg1QywgUGFudG9uZSAxMTVDLCBQYW50b25lIDM3NkMsIFBhbnRvbmUgMzYzQywgUGFudG9uZSAyNjZDLCBQYW50b25lIDE4NUMgYW5kIC0tPgo8IS0tIFBhbnRvbmUgQ29vbCBHcmV5IDdDLiAtLT4KPCEtLSBQVUJMSVNISU5HOiBWb2x1bWUgMTA3IG9mIHRoZSBQaW5uYWNsZSB3YXMgZGVzaWduZWQgYW5kIHByb2R1Y2VkIGJ5IHRoZSAyMDEzIFBpbm5hY2xlIC0tPgo8IS0tIHN0YWZmLiBUaGUgNDU2LXBhZ2UsIGFsbC1jb2xvciBQaW5uYWNsZSBpcyBwcmludGVkIG9uIDgwIGxiLiBnbG9zcyBwYXBlciBieSBIZXJmZiBKb25lcyAtLT4KPCEtLSBQdWJsaXNoaW5nIENvLiBpbiBLYW5zYXMgQ2l0eSwgTU8uIEFwcHJveGltYXRlbHkgMywwMDAgY29waWVzIHdlcmUgcHJlLW9yZGVyZWQgZm9yICQ1Mi4gLS0+CjwhLS0gQW55IGV4dHJhIGNvcGllcyB3ZXJlIHNvbGQgZm9yICQ2MC4gQSA0OC1wYWdlIHN1cHBsZW1lbnQgd2FzIGluY2x1ZGVkIGluIHRoaXMgcHJpY2UuIFRoZSAtLT4KPCEtLSBwdWJsaWNhdGlvbiB3YXMgY3JlYXRlZCB1c2luZyBBZG9iZSBDUzUuNSBzb2Z0d2FyZSBvbiA0MiBNYWNpbnRvc2ggZGVza3RvcCBhbmQgbGFwdG9wIC0tPgo8IS0tIGNvbXB1dGVycy4gLS0+CjwhLS0gUEhPVE9HUkFQSFk6IFBpbm5hY2xlIHN0YWZmIHBob3RvZ3JhcGhlcnMgc2hvdCBkaWdpdGFsIHBob3RvcyB1c2luZyBmb3VyIE5pa29uIEQ3MHMsIC0tPgo8IS0tIHR3byBOaWtvbiBEODBzIGFuZCBvbmUgTmlrb24gRDQwLiBTcG9ydCBncm91cCBwaG90b3Mgd2VyZSBzaG90IGJ5IFByZXN0aWdlIFBvcnRyYWl0cywgLS0+CjwhLS0gYW5kIGNsdWIgYW5kIGdyb3VwIHBob3RvcyB3ZXJlIHNob3QgYnkgYm90aCBQcmVzdGlnZSBQb3J0cmFpdHMgYW5kIFBpbm5hY2xlIHllYXJib29rIHN0YWZmIC0tPgo8IS0tIHBob3RvZ3JhcGhlcnMuIFNvbWUgc3VibWl0dGVkIHBob3RvcyBhcHBlYXIgdGhyb3VnaG91dCB0aGUgYm9vayBhcyB3ZWxsLiAtLT4KPCEtLSBFRElUT1JT4oCZIE5PVEU6IChBIHNwZWNpYWwgbm90ZSBmcm9tIHRoZSBjby1lZGl0b3JzLWluLWNoaWVmIHdhcyBpbmNsdWRlZCBoZXJlLiBUaGUgeWVhcmJvb2sgLS0+CjwhLS0gc3RhZmYgcGhvdG8gd2l0aCBuYW1lcyBhbmQgc3RhZmYgcG9zaXRpb25zIHdhcyBpbmNsdWRlZCBvbiB0aGUgc3ByZWFkIHdpdGggdGhlIGNvbG9waG9uLikgLS0+Cgo8IS0tY2hhcHRlcjplbmQ6MTJfY29sb3Bob24uUm1kLS0+CgoKIyBSZWZlcmVuY2VzIHstfQoKCjwhLS1jaGFwdGVyOmVuZDoxM19yZWZlcmVuY2VzLlJtZC0tPgoK